From 95d8a251db43c2b6822380c11b926b17ff11c8a2 Mon Sep 17 00:00:00 2001 From: felsabbagh3 Date: Sat, 2 Nov 2019 10:35:20 -0400 Subject: [PATCH] runtime tests --- runtime/Makefile | 3 +- runtime/intrinsics/vx_intrinsics.h | 10 +- runtime/intrinsics/vx_intrinsics.s | 6 +- runtime/startup/vx_start.s | 85 ++- runtime/tests/tests.c | 117 +++++ runtime/tests/tests.h | 16 + runtime/vortex_runtime.dump | 813 +++++++++++++++++------------ runtime/vortex_runtime.elf | Bin 9644 -> 10016 bytes runtime/vortex_runtime.hex | 177 ++++--- runtime/vx_main.c | 78 +-- 10 files changed, 771 insertions(+), 534 deletions(-) create mode 100644 runtime/tests/tests.c create mode 100644 runtime/tests/tests.h diff --git a/runtime/Makefile b/runtime/Makefile index 62f44592..4a4f0b80 100644 --- a/runtime/Makefile +++ b/runtime/Makefile @@ -9,6 +9,7 @@ CPY = /opt/riscv/bin/riscv32-unknown-elf-objcopy VX_STR = ./startup/vx_start.s VX_INT = ./intrinsics/vx_intrinsics.s VX_IO = ./io/vx_io.s ./io/vx_io.c +VX_TEST = ./tests/tests.c VX_MAIN = ./vx_main.c @@ -21,4 +22,4 @@ HEX: ELF $(CPY) -O ihex vortex_runtime.elf vortex_runtime.hex ELF: - $(COMP) $(CC_FLAGS) $(VX_STR) $(VX_INT) $(VX_IO) $(VX_MAIN) -o vortex_runtime.elf + $(COMP) $(CC_FLAGS) $(VX_STR) $(VX_INT) $(VX_IO) $(VX_TEST) $(VX_MAIN) -o vortex_runtime.elf diff --git a/runtime/intrinsics/vx_intrinsics.h b/runtime/intrinsics/vx_intrinsics.h index 8459789e..a346a42f 100644 --- a/runtime/intrinsics/vx_intrinsics.h +++ b/runtime/intrinsics/vx_intrinsics.h @@ -1,4 +1,8 @@ +#ifndef VX_INTRINSICS + +#define VX_INTRINSICS + // Spawns Warps void vx_wspawn (unsigned numWarps, unsigned PC_spawn); @@ -31,4 +35,8 @@ unsigned vx_warpID(void); #define __else else -#define __endif vx_join(); \ No newline at end of file +#define __endif vx_join(); + + + +#endif \ No newline at end of file diff --git a/runtime/intrinsics/vx_intrinsics.s b/runtime/intrinsics/vx_intrinsics.s index c2852ca7..5a85be0b 100644 --- a/runtime/intrinsics/vx_intrinsics.s +++ b/runtime/intrinsics/vx_intrinsics.s @@ -4,9 +4,9 @@ .section .text -.type vx_wsapwn, @function -.global vx_wsapwn -vx_wsapwn: +.type vx_wspawn, @function +.global vx_wspawn +vx_wspawn: .word 0x00b5106b # wspawn a0(numWarps), a1(PC SPAWN) ret diff --git a/runtime/startup/vx_start.s b/runtime/startup/vx_start.s index cf585b33..4c631124 100644 --- a/runtime/startup/vx_start.s +++ b/runtime/startup/vx_start.s @@ -3,64 +3,39 @@ .type _start, @function .global _start _start: - # li a0, 4 - # .word 0x0005006b # tmc a0 - # csrr a1,0x20 - # slli a1, a1, 2 - - # la a2, 0x20000000 - # add a2, a2, a1 - # sw a1, 0(a2) - - # la a2, 0x40000000 - # add a2, a2, a1 - # li a3, 5 - # sw a3, 0(a2) - - # la a2, 0x80000000 - # add a2, a2, a1 - # li a3, 7 - # sw a3, 0(a2) - - # la a2, 0x60000000 - # add a2, a2, a1 - # li a3, 7 - # sw a3, 0(a2) - - # la a2, 0x20000000 - # add a2, a2, a1 - # lw a4, 0(a2) - # li a0, 0 - # .word 0x0005006b # tmc a0 - ########################## - # li a0, 4 - # .word 0x0005006b # tmc 4 - # csrr a1,0x20 # get tid - # slli a1, a1, 10 # multiply tid by 1024 - # lui sp, 0x6ffff # load base sp - # sub sp, sp, a1 # sub sp - (1024*tid) - - # la a2, 0x20000000 - # csrr a3,0x20 # get tid - # slli a3, a3, 2 - # add a2, a2, a3 - # sw a3, 0(a2) - # lw a4, 0(a2) - - # li a0, 0 - # .word 0x0005006b # tmc a0 - ########################## - li a0, 4 - .word 0x0005006b # tmc 4 - csrr a1,0x20 # get tid - slli a1, a1, 10 # multiply tid by 1024 - lui sp, 0x6ffff # load base sp - sub sp, sp, a1 # sub sp - (1024*tid) - li a0, 4 - .word 0x0005006b # tmc 4 + # la a1, vx_set_sp + # li a0, 8 + # .word 0x00b5106b # wspawn a0(numWarps), a1(PC SPAWN) + jal vx_set_sp jal main li a0, 0 .word 0x0005006b # tmc a0 +.type vx_set_sp, @function +.global vx_set_sp +vx_set_sp: + li a0, 4 + .word 0x0005006b # tmc 4 + + csrr a3, 0x21 # get wid + slli a3, a3, 15 # shift by wid + csrr a2, 0x20 # get tid + slli a1, a2, 10 # multiply tid by 1024 + slli a2, a2, 2 # multiply tid by 4 + lui sp, 0x6ffff # load base sp + sub sp, sp, a1 # sub sp - (1024*tid) + sub sp, sp, a3 # shoft per warp + add sp, sp, a2 # shift sp for better performance + + csrr a3, 0x21 # get wid + beqz a3, RETURN + li a0, 0 + .word 0x0005006b # tmc 0 +RETURN: + li a0, 1 + .word 0x0005006b # tmc 1 + ret + + diff --git a/runtime/tests/tests.c b/runtime/tests/tests.c new file mode 100644 index 00000000..7e981cf3 --- /dev/null +++ b/runtime/tests/tests.c @@ -0,0 +1,117 @@ + + +#include "tests.h" +#include "../intrinsics/vx_intrinsics.h" +#include "../io/vx_io.h" + +void test_tmc() +{ + vx_print_str("test_tmc\n"); + + vx_tmc(4); + + unsigned tid = vx_threadID(); // Get TID + arr[tid] = tid; + + vx_tmc(1); + + vx_print_hex(arr[0]); + vx_print_str("\n"); + vx_print_hex(arr[1]); + vx_print_str("\n"); + vx_print_hex(arr[2]); + vx_print_str("\n"); + vx_print_hex(arr[3]); + vx_print_str("\n"); + + return; +} + +void test_divergence() +{ + unsigned tid = vx_threadID(); // Get TID + + bool b = tid < 2; + __if (b) + { + bool c = tid < 1; + __if (c) + { + arr[tid] = 10; + } + __else + { + arr[tid] = 11; + } + __endif + } + __else + { + bool c = tid < 3; + __if (c) + { + arr[tid] = 12; + } + __else + { + arr[tid] = 13; + } + __endif + } + __endif + + vx_print_hex(arr[0]); + vx_print_str("\n"); + vx_print_hex(arr[1]); + vx_print_str("\n"); + vx_print_hex(arr[2]); + vx_print_str("\n"); + vx_print_hex(arr[3]); + vx_print_str("\n"); + +} + + +unsigned wsapwn_arr[4]; + + +void simple_kernel() +{ + unsigned wid = vx_warpID(); + + wsapwn_arr[wid] = wid; + + if (wid != 0) + { + vx_tmc(0); + } + +} + +void test_wsapwn() +{ + unsigned func_ptr = (unsigned) simple_kernel; + vx_wspawn(4, func_ptr); + simple_kernel(); + + vx_print_hex(wsapwn_arr[0]); + vx_print_str("\n"); + vx_print_hex(wsapwn_arr[1]); + vx_print_str("\n"); + vx_print_hex(wsapwn_arr[2]); + vx_print_str("\n"); + vx_print_hex(wsapwn_arr[3]); + vx_print_str("\n"); +} + + + + + + + + + + + + diff --git a/runtime/tests/tests.h b/runtime/tests/tests.h new file mode 100644 index 00000000..fbca2546 --- /dev/null +++ b/runtime/tests/tests.h @@ -0,0 +1,16 @@ + + +#ifndef TESTS +#define TESTS + +int arr[4]; +void test_tmc(); + +void test_divergence(); + + +void test_wsapwn(); + + + +#endif \ No newline at end of file diff --git a/runtime/vortex_runtime.dump b/runtime/vortex_runtime.dump index c7208dbf..7ac83d05 100644 --- a/runtime/vortex_runtime.dump +++ b/runtime/vortex_runtime.dump @@ -5,291 +5,383 @@ vortex_runtime.elf: file format elf32-littleriscv Disassembly of section .text: 80000000 <_start>: -80000000: 00400513 li a0,4 -80000004: 0005006b 0x5006b -80000008: 020025f3 csrr a1,0x20 -8000000c: 00a59593 slli a1,a1,0xa -80000010: 6ffff137 lui sp,0x6ffff -80000014: 40b10133 sub sp,sp,a1 -80000018: 00400513 li a0,4 +80000000: 00000597 auipc a1,0x0 +80000004: 02058593 addi a1,a1,32 # 80000020 +80000008: 00800513 li a0,8 +8000000c: 00b5106b 0xb5106b +80000010: 010000ef jal ra,80000020 +80000014: 4dc000ef jal ra,800004f0
+80000018: 00000513 li a0,0 8000001c: 0005006b 0x5006b -80000020: 380000ef jal ra,800003a0
-80000024: 00000513 li a0,0 -80000028: 0005006b 0x5006b -8000002c : -8000002c: 00b5106b 0xb5106b -80000030: 00008067 ret +80000020 : +80000020: 00400513 li a0,4 +80000024: 0005006b 0x5006b +80000028: 021026f3 csrr a3,0x21 +8000002c: 00f69693 slli a3,a3,0xf +80000030: 02002673 csrr a2,0x20 +80000034: 00a61593 slli a1,a2,0xa +80000038: 00261613 slli a2,a2,0x2 +8000003c: 6ffff137 lui sp,0x6ffff +80000040: 40b10133 sub sp,sp,a1 +80000044: 40d10133 sub sp,sp,a3 +80000048: 00c10133 add sp,sp,a2 +8000004c: 021026f3 csrr a3,0x21 +80000050: 00068663 beqz a3,8000005c +80000054: 00000513 li a0,0 +80000058: 0005006b 0x5006b -80000034 : -80000034: 0005006b 0x5006b -80000038: 00008067 ret +8000005c : +8000005c: 00100513 li a0,1 +80000060: 0005006b 0x5006b +80000064: 00008067 ret -8000003c : -8000003c: 00b5406b 0xb5406b -80000040: 00008067 ret +80000068 : +80000068: 00b5106b 0xb5106b +8000006c: 00008067 ret -80000044 : -80000044: 0005206b 0x5206b -80000048: 00008067 ret +80000070 : +80000070: 0005006b 0x5006b +80000074: 00008067 ret -8000004c : -8000004c: 0000306b 0x306b -80000050: 00008067 ret +80000078 : +80000078: 00b5406b 0xb5406b +8000007c: 00008067 ret -80000054 : -80000054: 02102573 csrr a0,0x21 -80000058: 00008067 ret +80000080 : +80000080: 0005206b 0x5206b +80000084: 00008067 ret -8000005c : -8000005c: 02002573 csrr a0,0x20 -80000060: 00008067 ret +80000088 : +80000088: 0000306b 0x306b +8000008c: 00008067 ret -80000064 : -80000064: ff410113 addi sp,sp,-12 # 6fffeff4 <_start-0x1000100c> -80000068: 00112023 sw ra,0(sp) -8000006c: 00b12223 sw a1,4(sp) +80000090 : +80000090: 02102573 csrr a0,0x21 +80000094: 00008067 ret -80000070 : -80000070: 00054583 lbu a1,0(a0) -80000074: 00058863 beqz a1,80000084 -80000078: 01c000ef jal ra,80000094 -8000007c: 00150513 addi a0,a0,1 -80000080: ff1ff06f j 80000070 - -80000084 : -80000084: 00012083 lw ra,0(sp) -80000088: 00412583 lw a1,4(sp) -8000008c: 00c10113 addi sp,sp,12 -80000090: 00008067 ret - -80000094 : -80000094: 000102b7 lui t0,0x10 -80000098: 00b2a023 sw a1,0(t0) # 10000 <_start-0x7fff0000> +80000098 : +80000098: 02002573 csrr a0,0x20 8000009c: 00008067 ret -800000a0 : -800000a0: fe010113 addi sp,sp,-32 -800000a4: 00112e23 sw ra,28(sp) -800000a8: 00812c23 sw s0,24(sp) -800000ac: 02010413 addi s0,sp,32 -800000b0: fea42623 sw a0,-20(s0) -800000b4: 810007b7 lui a5,0x81000 -800000b8: fec42703 lw a4,-20(s0) -800000bc: 00271713 slli a4,a4,0x2 -800000c0: 0ac78793 addi a5,a5,172 # 810000ac -800000c4: 00f707b3 add a5,a4,a5 -800000c8: 0007a783 lw a5,0(a5) -800000cc: 00078513 mv a0,a5 -800000d0: f95ff0ef jal ra,80000064 -800000d4: 00000013 nop -800000d8: 01c12083 lw ra,28(sp) -800000dc: 01812403 lw s0,24(sp) -800000e0: 02010113 addi sp,sp,32 -800000e4: 00008067 ret +800000a0 : +800000a0: ff410113 addi sp,sp,-12 # 6fffeff4 <_start-0x1000100c> +800000a4: 00112023 sw ra,0(sp) +800000a8: 00b12223 sw a1,4(sp) -800000e8 : -800000e8: fe010113 addi sp,sp,-32 -800000ec: 00112e23 sw ra,28(sp) -800000f0: 00812c23 sw s0,24(sp) -800000f4: 02010413 addi s0,sp,32 -800000f8: fea42623 sw a0,-20(s0) -800000fc: feb42423 sw a1,-24(s0) -80000100: fec42503 lw a0,-20(s0) -80000104: f61ff0ef jal ra,80000064 -80000108: fe842503 lw a0,-24(s0) -8000010c: f95ff0ef jal ra,800000a0 -80000110: 810007b7 lui a5,0x81000 -80000114: 04078513 addi a0,a5,64 # 81000040 -80000118: f4dff0ef jal ra,80000064 -8000011c: 00000013 nop -80000120: 01c12083 lw ra,28(sp) -80000124: 01812403 lw s0,24(sp) -80000128: 02010113 addi sp,sp,32 -8000012c: 00008067 ret +800000ac : +800000ac: 00054583 lbu a1,0(a0) +800000b0: 00058863 beqz a1,800000c0 +800000b4: 01c000ef jal ra,800000d0 +800000b8: 00150513 addi a0,a0,1 +800000bc: ff1ff06f j 800000ac -80000130 : -80000130: fe010113 addi sp,sp,-32 -80000134: 00112e23 sw ra,28(sp) -80000138: 00812c23 sw s0,24(sp) -8000013c: 02010413 addi s0,sp,32 -80000140: 810007b7 lui a5,0x81000 -80000144: 08478513 addi a0,a5,132 # 81000084 -80000148: f1dff0ef jal ra,80000064 -8000014c: 00400513 li a0,4 -80000150: ee5ff0ef jal ra,80000034 -80000154: f09ff0ef jal ra,8000005c -80000158: fea42623 sw a0,-20(s0) -8000015c: fec42703 lw a4,-20(s0) -80000160: 810007b7 lui a5,0x81000 -80000164: fec42683 lw a3,-20(s0) -80000168: 00269693 slli a3,a3,0x2 -8000016c: 12c78793 addi a5,a5,300 # 8100012c -80000170: 00f687b3 add a5,a3,a5 -80000174: 00e7a023 sw a4,0(a5) -80000178: 00100513 li a0,1 -8000017c: eb9ff0ef jal ra,80000034 -80000180: 810007b7 lui a5,0x81000 -80000184: 12c7a783 lw a5,300(a5) # 8100012c -80000188: 00078513 mv a0,a5 -8000018c: f15ff0ef jal ra,800000a0 -80000190: 810007b7 lui a5,0x81000 -80000194: 09078513 addi a0,a5,144 # 81000090 -80000198: ecdff0ef jal ra,80000064 +800000c0 : +800000c0: 00012083 lw ra,0(sp) +800000c4: 00412583 lw a1,4(sp) +800000c8: 00c10113 addi sp,sp,12 +800000cc: 00008067 ret + +800000d0 : +800000d0: 000102b7 lui t0,0x10 +800000d4: 00b2a023 sw a1,0(t0) # 10000 <_start-0x7fff0000> +800000d8: 00008067 ret + +800000dc : +800000dc: fe010113 addi sp,sp,-32 +800000e0: 00112e23 sw ra,28(sp) +800000e4: 00812c23 sw s0,24(sp) +800000e8: 02010413 addi s0,sp,32 +800000ec: fea42623 sw a0,-20(s0) +800000f0: 810007b7 lui a5,0x81000 +800000f4: fec42703 lw a4,-20(s0) +800000f8: 00271713 slli a4,a4,0x2 +800000fc: 0e878793 addi a5,a5,232 # 810000e8 +80000100: 00f707b3 add a5,a4,a5 +80000104: 0007a783 lw a5,0(a5) +80000108: 00078513 mv a0,a5 +8000010c: f95ff0ef jal ra,800000a0 +80000110: 00000013 nop +80000114: 01c12083 lw ra,28(sp) +80000118: 01812403 lw s0,24(sp) +8000011c: 02010113 addi sp,sp,32 +80000120: 00008067 ret + +80000124 : +80000124: fe010113 addi sp,sp,-32 +80000128: 00112e23 sw ra,28(sp) +8000012c: 00812c23 sw s0,24(sp) +80000130: 02010413 addi s0,sp,32 +80000134: fea42623 sw a0,-20(s0) +80000138: feb42423 sw a1,-24(s0) +8000013c: fec42503 lw a0,-20(s0) +80000140: f61ff0ef jal ra,800000a0 +80000144: fe842503 lw a0,-24(s0) +80000148: f95ff0ef jal ra,800000dc +8000014c: 810007b7 lui a5,0x81000 +80000150: 04078513 addi a0,a5,64 # 81000040 +80000154: f4dff0ef jal ra,800000a0 +80000158: 00000013 nop +8000015c: 01c12083 lw ra,28(sp) +80000160: 01812403 lw s0,24(sp) +80000164: 02010113 addi sp,sp,32 +80000168: 00008067 ret + +8000016c : +8000016c: fe010113 addi sp,sp,-32 +80000170: 00112e23 sw ra,28(sp) +80000174: 00812c23 sw s0,24(sp) +80000178: 02010413 addi s0,sp,32 +8000017c: 810007b7 lui a5,0x81000 +80000180: 08478513 addi a0,a5,132 # 81000084 +80000184: f1dff0ef jal ra,800000a0 +80000188: 00400513 li a0,4 +8000018c: ee5ff0ef jal ra,80000070 +80000190: f09ff0ef jal ra,80000098 +80000194: fea42623 sw a0,-20(s0) +80000198: fec42703 lw a4,-20(s0) 8000019c: 810007b7 lui a5,0x81000 -800001a0: 12c78793 addi a5,a5,300 # 8100012c -800001a4: 0047a783 lw a5,4(a5) -800001a8: 00078513 mv a0,a5 -800001ac: ef5ff0ef jal ra,800000a0 -800001b0: 810007b7 lui a5,0x81000 -800001b4: 09078513 addi a0,a5,144 # 81000090 -800001b8: eadff0ef jal ra,80000064 +800001a0: fec42683 lw a3,-20(s0) +800001a4: 00269693 slli a3,a3,0x2 +800001a8: 1a878793 addi a5,a5,424 # 810001a8 +800001ac: 00f687b3 add a5,a3,a5 +800001b0: 00e7a023 sw a4,0(a5) +800001b4: 00100513 li a0,1 +800001b8: eb9ff0ef jal ra,80000070 800001bc: 810007b7 lui a5,0x81000 -800001c0: 12c78793 addi a5,a5,300 # 8100012c -800001c4: 0087a783 lw a5,8(a5) -800001c8: 00078513 mv a0,a5 -800001cc: ed5ff0ef jal ra,800000a0 -800001d0: 810007b7 lui a5,0x81000 -800001d4: 09078513 addi a0,a5,144 # 81000090 -800001d8: e8dff0ef jal ra,80000064 -800001dc: 810007b7 lui a5,0x81000 -800001e0: 12c78793 addi a5,a5,300 # 8100012c -800001e4: 00c7a783 lw a5,12(a5) -800001e8: 00078513 mv a0,a5 -800001ec: eb5ff0ef jal ra,800000a0 -800001f0: 810007b7 lui a5,0x81000 -800001f4: 09078513 addi a0,a5,144 # 81000090 -800001f8: e6dff0ef jal ra,80000064 -800001fc: 00000013 nop -80000200: 01c12083 lw ra,28(sp) -80000204: 01812403 lw s0,24(sp) -80000208: 02010113 addi sp,sp,32 -8000020c: 00008067 ret +800001c0: 1a87a783 lw a5,424(a5) # 810001a8 +800001c4: 00078513 mv a0,a5 +800001c8: f15ff0ef jal ra,800000dc +800001cc: 810007b7 lui a5,0x81000 +800001d0: 09078513 addi a0,a5,144 # 81000090 +800001d4: ecdff0ef jal ra,800000a0 +800001d8: 810007b7 lui a5,0x81000 +800001dc: 1a878793 addi a5,a5,424 # 810001a8 +800001e0: 0047a783 lw a5,4(a5) +800001e4: 00078513 mv a0,a5 +800001e8: ef5ff0ef jal ra,800000dc +800001ec: 810007b7 lui a5,0x81000 +800001f0: 09078513 addi a0,a5,144 # 81000090 +800001f4: eadff0ef jal ra,800000a0 +800001f8: 810007b7 lui a5,0x81000 +800001fc: 1a878793 addi a5,a5,424 # 810001a8 +80000200: 0087a783 lw a5,8(a5) +80000204: 00078513 mv a0,a5 +80000208: ed5ff0ef jal ra,800000dc +8000020c: 810007b7 lui a5,0x81000 +80000210: 09078513 addi a0,a5,144 # 81000090 +80000214: e8dff0ef jal ra,800000a0 +80000218: 810007b7 lui a5,0x81000 +8000021c: 1a878793 addi a5,a5,424 # 810001a8 +80000220: 00c7a783 lw a5,12(a5) +80000224: 00078513 mv a0,a5 +80000228: eb5ff0ef jal ra,800000dc +8000022c: 810007b7 lui a5,0x81000 +80000230: 09078513 addi a0,a5,144 # 81000090 +80000234: e6dff0ef jal ra,800000a0 +80000238: 00000013 nop +8000023c: 01c12083 lw ra,28(sp) +80000240: 01812403 lw s0,24(sp) +80000244: 02010113 addi sp,sp,32 +80000248: 00008067 ret -80000210 : -80000210: fe010113 addi sp,sp,-32 -80000214: 00112e23 sw ra,28(sp) -80000218: 00812c23 sw s0,24(sp) -8000021c: 02010413 addi s0,sp,32 -80000220: e3dff0ef jal ra,8000005c -80000224: fea42623 sw a0,-20(s0) -80000228: fec42783 lw a5,-20(s0) -8000022c: 0027b793 sltiu a5,a5,2 -80000230: fef405a3 sb a5,-21(s0) -80000234: feb44783 lbu a5,-21(s0) -80000238: 00078513 mv a0,a5 -8000023c: e09ff0ef jal ra,80000044 -80000240: feb44783 lbu a5,-21(s0) -80000244: 06078463 beqz a5,800002ac -80000248: fec42783 lw a5,-20(s0) -8000024c: 0017b793 seqz a5,a5 -80000250: fef40523 sb a5,-22(s0) -80000254: fea44783 lbu a5,-22(s0) -80000258: 00078513 mv a0,a5 -8000025c: de9ff0ef jal ra,80000044 -80000260: fea44783 lbu a5,-22(s0) -80000264: 02078263 beqz a5,80000288 -80000268: 810007b7 lui a5,0x81000 -8000026c: fec42703 lw a4,-20(s0) -80000270: 00271713 slli a4,a4,0x2 -80000274: 12c78793 addi a5,a5,300 # 8100012c -80000278: 00f707b3 add a5,a4,a5 -8000027c: 00a00713 li a4,10 -80000280: 00e7a023 sw a4,0(a5) -80000284: 0200006f j 800002a4 -80000288: 810007b7 lui a5,0x81000 -8000028c: fec42703 lw a4,-20(s0) -80000290: 00271713 slli a4,a4,0x2 -80000294: 12c78793 addi a5,a5,300 # 8100012c -80000298: 00f707b3 add a5,a4,a5 -8000029c: 00b00713 li a4,11 -800002a0: 00e7a023 sw a4,0(a5) -800002a4: da9ff0ef jal ra,8000004c -800002a8: 0640006f j 8000030c -800002ac: fec42783 lw a5,-20(s0) -800002b0: 0037b793 sltiu a5,a5,3 -800002b4: fef404a3 sb a5,-23(s0) -800002b8: fe944783 lbu a5,-23(s0) -800002bc: 00078513 mv a0,a5 -800002c0: d85ff0ef jal ra,80000044 -800002c4: fe944783 lbu a5,-23(s0) -800002c8: 02078263 beqz a5,800002ec -800002cc: 810007b7 lui a5,0x81000 -800002d0: fec42703 lw a4,-20(s0) -800002d4: 00271713 slli a4,a4,0x2 -800002d8: 12c78793 addi a5,a5,300 # 8100012c -800002dc: 00f707b3 add a5,a4,a5 -800002e0: 00c00713 li a4,12 -800002e4: 00e7a023 sw a4,0(a5) -800002e8: 0200006f j 80000308 -800002ec: 810007b7 lui a5,0x81000 -800002f0: fec42703 lw a4,-20(s0) -800002f4: 00271713 slli a4,a4,0x2 -800002f8: 12c78793 addi a5,a5,300 # 8100012c -800002fc: 00f707b3 add a5,a4,a5 -80000300: 00d00713 li a4,13 -80000304: 00e7a023 sw a4,0(a5) -80000308: d45ff0ef jal ra,8000004c -8000030c: d41ff0ef jal ra,8000004c -80000310: 810007b7 lui a5,0x81000 -80000314: 12c7a783 lw a5,300(a5) # 8100012c -80000318: 00078513 mv a0,a5 -8000031c: d85ff0ef jal ra,800000a0 -80000320: 810007b7 lui a5,0x81000 -80000324: 09078513 addi a0,a5,144 # 81000090 -80000328: d3dff0ef jal ra,80000064 -8000032c: 810007b7 lui a5,0x81000 -80000330: 12c78793 addi a5,a5,300 # 8100012c -80000334: 0047a783 lw a5,4(a5) -80000338: 00078513 mv a0,a5 -8000033c: d65ff0ef jal ra,800000a0 -80000340: 810007b7 lui a5,0x81000 -80000344: 09078513 addi a0,a5,144 # 81000090 -80000348: d1dff0ef jal ra,80000064 +8000024c : +8000024c: fe010113 addi sp,sp,-32 +80000250: 00112e23 sw ra,28(sp) +80000254: 00812c23 sw s0,24(sp) +80000258: 02010413 addi s0,sp,32 +8000025c: e3dff0ef jal ra,80000098 +80000260: fea42623 sw a0,-20(s0) +80000264: fec42783 lw a5,-20(s0) +80000268: 0027b793 sltiu a5,a5,2 +8000026c: fef405a3 sb a5,-21(s0) +80000270: feb44783 lbu a5,-21(s0) +80000274: 00078513 mv a0,a5 +80000278: e09ff0ef jal ra,80000080 +8000027c: feb44783 lbu a5,-21(s0) +80000280: 06078463 beqz a5,800002e8 +80000284: fec42783 lw a5,-20(s0) +80000288: 0017b793 seqz a5,a5 +8000028c: fef40523 sb a5,-22(s0) +80000290: fea44783 lbu a5,-22(s0) +80000294: 00078513 mv a0,a5 +80000298: de9ff0ef jal ra,80000080 +8000029c: fea44783 lbu a5,-22(s0) +800002a0: 02078263 beqz a5,800002c4 +800002a4: 810007b7 lui a5,0x81000 +800002a8: fec42703 lw a4,-20(s0) +800002ac: 00271713 slli a4,a4,0x2 +800002b0: 1a878793 addi a5,a5,424 # 810001a8 +800002b4: 00f707b3 add a5,a4,a5 +800002b8: 00a00713 li a4,10 +800002bc: 00e7a023 sw a4,0(a5) +800002c0: 0200006f j 800002e0 +800002c4: 810007b7 lui a5,0x81000 +800002c8: fec42703 lw a4,-20(s0) +800002cc: 00271713 slli a4,a4,0x2 +800002d0: 1a878793 addi a5,a5,424 # 810001a8 +800002d4: 00f707b3 add a5,a4,a5 +800002d8: 00b00713 li a4,11 +800002dc: 00e7a023 sw a4,0(a5) +800002e0: da9ff0ef jal ra,80000088 +800002e4: 0640006f j 80000348 +800002e8: fec42783 lw a5,-20(s0) +800002ec: 0037b793 sltiu a5,a5,3 +800002f0: fef404a3 sb a5,-23(s0) +800002f4: fe944783 lbu a5,-23(s0) +800002f8: 00078513 mv a0,a5 +800002fc: d85ff0ef jal ra,80000080 +80000300: fe944783 lbu a5,-23(s0) +80000304: 02078263 beqz a5,80000328 +80000308: 810007b7 lui a5,0x81000 +8000030c: fec42703 lw a4,-20(s0) +80000310: 00271713 slli a4,a4,0x2 +80000314: 1a878793 addi a5,a5,424 # 810001a8 +80000318: 00f707b3 add a5,a4,a5 +8000031c: 00c00713 li a4,12 +80000320: 00e7a023 sw a4,0(a5) +80000324: 0200006f j 80000344 +80000328: 810007b7 lui a5,0x81000 +8000032c: fec42703 lw a4,-20(s0) +80000330: 00271713 slli a4,a4,0x2 +80000334: 1a878793 addi a5,a5,424 # 810001a8 +80000338: 00f707b3 add a5,a4,a5 +8000033c: 00d00713 li a4,13 +80000340: 00e7a023 sw a4,0(a5) +80000344: d45ff0ef jal ra,80000088 +80000348: d41ff0ef jal ra,80000088 8000034c: 810007b7 lui a5,0x81000 -80000350: 12c78793 addi a5,a5,300 # 8100012c -80000354: 0087a783 lw a5,8(a5) -80000358: 00078513 mv a0,a5 -8000035c: d45ff0ef jal ra,800000a0 -80000360: 810007b7 lui a5,0x81000 -80000364: 09078513 addi a0,a5,144 # 81000090 -80000368: cfdff0ef jal ra,80000064 -8000036c: 810007b7 lui a5,0x81000 -80000370: 12c78793 addi a5,a5,300 # 8100012c -80000374: 00c7a783 lw a5,12(a5) -80000378: 00078513 mv a0,a5 -8000037c: d25ff0ef jal ra,800000a0 -80000380: 810007b7 lui a5,0x81000 -80000384: 09078513 addi a0,a5,144 # 81000090 -80000388: cddff0ef jal ra,80000064 -8000038c: 00000013 nop -80000390: 01c12083 lw ra,28(sp) -80000394: 01812403 lw s0,24(sp) -80000398: 02010113 addi sp,sp,32 -8000039c: 00008067 ret - -800003a0
: -800003a0: ff010113 addi sp,sp,-16 -800003a4: 00112623 sw ra,12(sp) -800003a8: 00812423 sw s0,8(sp) -800003ac: 01010413 addi s0,sp,16 -800003b0: 00100513 li a0,1 -800003b4: c81ff0ef jal ra,80000034 -800003b8: d79ff0ef jal ra,80000130 +80000350: 1a87a783 lw a5,424(a5) # 810001a8 +80000354: 00078513 mv a0,a5 +80000358: d85ff0ef jal ra,800000dc +8000035c: 810007b7 lui a5,0x81000 +80000360: 09078513 addi a0,a5,144 # 81000090 +80000364: d3dff0ef jal ra,800000a0 +80000368: 810007b7 lui a5,0x81000 +8000036c: 1a878793 addi a5,a5,424 # 810001a8 +80000370: 0047a783 lw a5,4(a5) +80000374: 00078513 mv a0,a5 +80000378: d65ff0ef jal ra,800000dc +8000037c: 810007b7 lui a5,0x81000 +80000380: 09078513 addi a0,a5,144 # 81000090 +80000384: d1dff0ef jal ra,800000a0 +80000388: 810007b7 lui a5,0x81000 +8000038c: 1a878793 addi a5,a5,424 # 810001a8 +80000390: 0087a783 lw a5,8(a5) +80000394: 00078513 mv a0,a5 +80000398: d45ff0ef jal ra,800000dc +8000039c: 810007b7 lui a5,0x81000 +800003a0: 09078513 addi a0,a5,144 # 81000090 +800003a4: cfdff0ef jal ra,800000a0 +800003a8: 810007b7 lui a5,0x81000 +800003ac: 1a878793 addi a5,a5,424 # 810001a8 +800003b0: 00c7a783 lw a5,12(a5) +800003b4: 00078513 mv a0,a5 +800003b8: d25ff0ef jal ra,800000dc 800003bc: 810007b7 lui a5,0x81000 -800003c0: 09478513 addi a0,a5,148 # 81000094 -800003c4: ca1ff0ef jal ra,80000064 -800003c8: 00400513 li a0,4 -800003cc: c69ff0ef jal ra,80000034 -800003d0: e41ff0ef jal ra,80000210 -800003d4: 00100513 li a0,1 -800003d8: c5dff0ef jal ra,80000034 -800003dc: 00000793 li a5,0 -800003e0: 00078513 mv a0,a5 -800003e4: 00c12083 lw ra,12(sp) -800003e8: 00812403 lw s0,8(sp) -800003ec: 01010113 addi sp,sp,16 -800003f0: 00008067 ret +800003c0: 09078513 addi a0,a5,144 # 81000090 +800003c4: cddff0ef jal ra,800000a0 +800003c8: 00000013 nop +800003cc: 01c12083 lw ra,28(sp) +800003d0: 01812403 lw s0,24(sp) +800003d4: 02010113 addi sp,sp,32 +800003d8: 00008067 ret + +800003dc : +800003dc: fe010113 addi sp,sp,-32 +800003e0: 00112e23 sw ra,28(sp) +800003e4: 00812c23 sw s0,24(sp) +800003e8: 02010413 addi s0,sp,32 +800003ec: ca5ff0ef jal ra,80000090 +800003f0: fea42623 sw a0,-20(s0) +800003f4: 810007b7 lui a5,0x81000 +800003f8: fec42703 lw a4,-20(s0) +800003fc: 00271713 slli a4,a4,0x2 +80000400: 1b878793 addi a5,a5,440 # 810001b8 +80000404: 00f707b3 add a5,a4,a5 +80000408: fec42703 lw a4,-20(s0) +8000040c: 00e7a023 sw a4,0(a5) +80000410: fec42783 lw a5,-20(s0) +80000414: 00078663 beqz a5,80000420 +80000418: 00000513 li a0,0 +8000041c: c55ff0ef jal ra,80000070 +80000420: 00000013 nop +80000424: 01c12083 lw ra,28(sp) +80000428: 01812403 lw s0,24(sp) +8000042c: 02010113 addi sp,sp,32 +80000430: 00008067 ret + +80000434 : +80000434: fe010113 addi sp,sp,-32 +80000438: 00112e23 sw ra,28(sp) +8000043c: 00812c23 sw s0,24(sp) +80000440: 02010413 addi s0,sp,32 +80000444: 800007b7 lui a5,0x80000 +80000448: 3dc78793 addi a5,a5,988 # 800003dc +8000044c: fef42623 sw a5,-20(s0) +80000450: fec42583 lw a1,-20(s0) +80000454: 00400513 li a0,4 +80000458: c11ff0ef jal ra,80000068 +8000045c: f81ff0ef jal ra,800003dc +80000460: 810007b7 lui a5,0x81000 +80000464: 1b87a783 lw a5,440(a5) # 810001b8 +80000468: 00078513 mv a0,a5 +8000046c: c71ff0ef jal ra,800000dc +80000470: 810007b7 lui a5,0x81000 +80000474: 09078513 addi a0,a5,144 # 81000090 +80000478: c29ff0ef jal ra,800000a0 +8000047c: 810007b7 lui a5,0x81000 +80000480: 1b878793 addi a5,a5,440 # 810001b8 +80000484: 0047a783 lw a5,4(a5) +80000488: 00078513 mv a0,a5 +8000048c: c51ff0ef jal ra,800000dc +80000490: 810007b7 lui a5,0x81000 +80000494: 09078513 addi a0,a5,144 # 81000090 +80000498: c09ff0ef jal ra,800000a0 +8000049c: 810007b7 lui a5,0x81000 +800004a0: 1b878793 addi a5,a5,440 # 810001b8 +800004a4: 0087a783 lw a5,8(a5) +800004a8: 00078513 mv a0,a5 +800004ac: c31ff0ef jal ra,800000dc +800004b0: 810007b7 lui a5,0x81000 +800004b4: 09078513 addi a0,a5,144 # 81000090 +800004b8: be9ff0ef jal ra,800000a0 +800004bc: 810007b7 lui a5,0x81000 +800004c0: 1b878793 addi a5,a5,440 # 810001b8 +800004c4: 00c7a783 lw a5,12(a5) +800004c8: 00078513 mv a0,a5 +800004cc: c11ff0ef jal ra,800000dc +800004d0: 810007b7 lui a5,0x81000 +800004d4: 09078513 addi a0,a5,144 # 81000090 +800004d8: bc9ff0ef jal ra,800000a0 +800004dc: 00000013 nop +800004e0: 01c12083 lw ra,28(sp) +800004e4: 01812403 lw s0,24(sp) +800004e8: 02010113 addi sp,sp,32 +800004ec: 00008067 ret + +800004f0
: +800004f0: ff010113 addi sp,sp,-16 +800004f4: 00112623 sw ra,12(sp) +800004f8: 00812423 sw s0,8(sp) +800004fc: 01010413 addi s0,sp,16 +80000500: 00100513 li a0,1 +80000504: b6dff0ef jal ra,80000070 +80000508: c65ff0ef jal ra,8000016c +8000050c: 810007b7 lui a5,0x81000 +80000510: 0d478513 addi a0,a5,212 # 810000d4 +80000514: b8dff0ef jal ra,800000a0 +80000518: 00400513 li a0,4 +8000051c: b55ff0ef jal ra,80000070 +80000520: d2dff0ef jal ra,8000024c +80000524: 00100513 li a0,1 +80000528: b49ff0ef jal ra,80000070 +8000052c: 00000793 li a5,0 +80000530: 00078513 mv a0,a5 +80000534: 00c12083 lw ra,12(sp) +80000538: 00812403 lw s0,8(sp) +8000053c: 01010113 addi sp,sp,16 +80000540: 00008067 ret Disassembly of section .rodata: @@ -316,7 +408,7 @@ Disassembly of section .rodata: 8100002a: 0000 unimp 8100002c: 0062 c.slli zero,0x18 8100002e: 0000 unimp -81000030: 00000063 beqz zero,81000030 +81000030: 00000063 beqz zero,81000030 81000034: 0064 addi s1,sp,12 81000036: 0000 unimp 81000038: 0065 c.nop 25 @@ -347,7 +439,7 @@ Disassembly of section .rodata: 8100006e: 0000 unimp 81000070: 0062 c.slli zero,0x18 81000072: 0000 unimp -81000074: 00000063 beqz zero,81000074 +81000074: 00000063 beqz zero,81000074 81000078: 0064 addi s1,sp,12 8100007a: 0000 unimp 8100007c: 0065 c.nop 25 @@ -361,90 +453,153 @@ Disassembly of section .rodata: 8100008e: 0000 unimp 81000090: 000a c.slli zero,0x2 81000092: 0000 unimp -81000094: 6e32 flw ft8,12(sp) -81000096: 7765 lui a4,0xffff9 -81000098: 7420 flw fs0,104(s0) -8100009a: 7365 lui t1,0xffff9 -8100009c: 5f74 lw a3,124(a4) -8100009e: 6964 flw fs1,84(a0) -810000a0: 6576 flw fa0,92(sp) -810000a2: 6772 flw fa4,28(sp) -810000a4: 6e65 lui t3,0x19 -810000a6: 000a6563 bltu s4,zero,810000b0 +81000094: 0030 addi a2,sp,8 +81000096: 0000 unimp +81000098: 0031 c.nop 12 +8100009a: 0000 unimp +8100009c: 0032 c.slli zero,0xc +8100009e: 0000 unimp +810000a0: 00000033 add zero,zero,zero +810000a4: 0034 addi a3,sp,8 +810000a6: 0000 unimp +810000a8: 0035 c.nop 13 +810000aa: 0000 unimp +810000ac: 0036 c.slli zero,0xd +810000ae: 0000 unimp +810000b0: 00000037 lui zero,0x0 +810000b4: 0038 addi a4,sp,8 +810000b6: 0000 unimp +810000b8: 0039 c.nop 14 +810000ba: 0000 unimp +810000bc: 0061 c.nop 24 +810000be: 0000 unimp +810000c0: 0062 c.slli zero,0x18 +810000c2: 0000 unimp +810000c4: 00000063 beqz zero,810000c4 +810000c8: 0064 addi s1,sp,12 +810000ca: 0000 unimp +810000cc: 0065 c.nop 25 +810000ce: 0000 unimp +810000d0: 0066 c.slli zero,0x19 +810000d2: 0000 unimp +810000d4: 6574 flw fa3,76(a0) +810000d6: 645f7473 csrrci s0,0x645,30 +810000da: 7669 lui a2,0xffffa +810000dc: 7265 lui tp,0xffff9 +810000de: 636e6567 0x636e6567 +810000e2: 0a65 addi s4,s4,25 + ... Disassembly of section .data: -810000ac : -810000ac: 0000 unimp -810000ae: 8100 0x8100 -810000b0: 0004 0x4 -810000b2: 8100 0x8100 -810000b4: 0008 0x8 -810000b6: 8100 0x8100 -810000b8: 000c 0xc -810000ba: 8100 0x8100 -810000bc: 0010 0x10 -810000be: 8100 0x8100 -810000c0: 0014 0x14 -810000c2: 8100 0x8100 -810000c4: 0018 0x18 -810000c6: 8100 0x8100 -810000c8: 001c 0x1c -810000ca: 8100 0x8100 -810000cc: 0020 addi s0,sp,8 -810000ce: 8100 0x8100 -810000d0: 0024 addi s1,sp,8 -810000d2: 8100 0x8100 -810000d4: 0028 addi a0,sp,8 -810000d6: 8100 0x8100 -810000d8: 002c addi a1,sp,8 -810000da: 8100 0x8100 -810000dc: 0030 addi a2,sp,8 -810000de: 8100 0x8100 -810000e0: 0034 addi a3,sp,8 -810000e2: 8100 0x8100 -810000e4: 0038 addi a4,sp,8 -810000e6: 8100 0x8100 -810000e8: 003c addi a5,sp,8 +810000e8 : +810000e8: 0000 unimp 810000ea: 8100 0x8100 - -810000ec : -810000ec: 0044 addi s1,sp,4 +810000ec: 0004 0x4 810000ee: 8100 0x8100 -810000f0: 0048 addi a0,sp,4 +810000f0: 0008 0x8 810000f2: 8100 0x8100 -810000f4: 004c addi a1,sp,4 +810000f4: 000c 0xc 810000f6: 8100 0x8100 -810000f8: 0050 addi a2,sp,4 +810000f8: 0010 0x10 810000fa: 8100 0x8100 -810000fc: 0054 addi a3,sp,4 +810000fc: 0014 0x14 810000fe: 8100 0x8100 -81000100: 0058 addi a4,sp,4 +81000100: 0018 0x18 81000102: 8100 0x8100 -81000104: 005c addi a5,sp,4 +81000104: 001c 0x1c 81000106: 8100 0x8100 -81000108: 0060 addi s0,sp,12 +81000108: 0020 addi s0,sp,8 8100010a: 8100 0x8100 -8100010c: 0064 addi s1,sp,12 +8100010c: 0024 addi s1,sp,8 8100010e: 8100 0x8100 -81000110: 0068 addi a0,sp,12 +81000110: 0028 addi a0,sp,8 81000112: 8100 0x8100 -81000114: 006c addi a1,sp,12 +81000114: 002c addi a1,sp,8 81000116: 8100 0x8100 -81000118: 0070 addi a2,sp,12 +81000118: 0030 addi a2,sp,8 8100011a: 8100 0x8100 -8100011c: 0074 addi a3,sp,12 +8100011c: 0034 addi a3,sp,8 8100011e: 8100 0x8100 -81000120: 0078 addi a4,sp,12 +81000120: 0038 addi a4,sp,8 81000122: 8100 0x8100 -81000124: 007c addi a5,sp,12 +81000124: 003c addi a5,sp,8 81000126: 8100 0x8100 -81000128: 0080 addi s0,sp,64 + +81000128 : +81000128: 0044 addi s1,sp,4 8100012a: 8100 0x8100 +8100012c: 0048 addi a0,sp,4 +8100012e: 8100 0x8100 +81000130: 004c addi a1,sp,4 +81000132: 8100 0x8100 +81000134: 0050 addi a2,sp,4 +81000136: 8100 0x8100 +81000138: 0054 addi a3,sp,4 +8100013a: 8100 0x8100 +8100013c: 0058 addi a4,sp,4 +8100013e: 8100 0x8100 +81000140: 005c addi a5,sp,4 +81000142: 8100 0x8100 +81000144: 0060 addi s0,sp,12 +81000146: 8100 0x8100 +81000148: 0064 addi s1,sp,12 +8100014a: 8100 0x8100 +8100014c: 0068 addi a0,sp,12 +8100014e: 8100 0x8100 +81000150: 006c addi a1,sp,12 +81000152: 8100 0x8100 +81000154: 0070 addi a2,sp,12 +81000156: 8100 0x8100 +81000158: 0074 addi a3,sp,12 +8100015a: 8100 0x8100 +8100015c: 0078 addi a4,sp,12 +8100015e: 8100 0x8100 +81000160: 007c addi a5,sp,12 +81000162: 8100 0x8100 +81000164: 0080 addi s0,sp,64 +81000166: 8100 0x8100 + +81000168 : +81000168: 0094 addi a3,sp,64 +8100016a: 8100 0x8100 +8100016c: 0098 addi a4,sp,64 +8100016e: 8100 0x8100 +81000170: 009c addi a5,sp,64 +81000172: 8100 0x8100 +81000174: 00a0 addi s0,sp,72 +81000176: 8100 0x8100 +81000178: 00a4 addi s1,sp,72 +8100017a: 8100 0x8100 +8100017c: 00a8 addi a0,sp,72 +8100017e: 8100 0x8100 +81000180: 00ac addi a1,sp,72 +81000182: 8100 0x8100 +81000184: 00b0 addi a2,sp,72 +81000186: 8100 0x8100 +81000188: 00b4 addi a3,sp,72 +8100018a: 8100 0x8100 +8100018c: 00b8 addi a4,sp,72 +8100018e: 8100 0x8100 +81000190: 00bc addi a5,sp,72 +81000192: 8100 0x8100 +81000194: 00c0 addi s0,sp,68 +81000196: 8100 0x8100 +81000198: 00c4 addi s1,sp,68 +8100019a: 8100 0x8100 +8100019c: 00c8 addi a0,sp,68 +8100019e: 8100 0x8100 +810001a0: 00cc addi a1,sp,68 +810001a2: 8100 0x8100 +810001a4: 00d0 addi a2,sp,68 +810001a6: 8100 0x8100 Disassembly of section .bss: -8100012c : +810001a8 : + ... + +810001b8 : ... Disassembly of section .comment: diff --git a/runtime/vortex_runtime.elf b/runtime/vortex_runtime.elf index 3e9e39fae827fc2361b6bdfafb94a869b0093962..d92ccd76160cc4039d8b32f74e513a67c50d8224 100644 GIT binary patch delta 1470 zcmYjQT}T{P6h5;$E?P}y9kj4E+133qNkJb>S||t-R?_@5Bw|Azg3D?KT~^oa?lwwa z99?w#&%=}*CT!_FY*G2amUgn3qq-yQR7dTU+X`;~Xs2QLrMaz_e{i3r)6UebW0co(g1%YM z)0Y0Hpl?_@d*ismI}KLu=jK}FQEsv(`>)bjX#YYe|Jf=R+W#WxYX$v%`*lHIv2>PH z8`)c>;xP92%;UeY%Y~x)#a;Eodcyu{?%Mw$&OKAVQwp|g%x;_;@}IDe9Q8vwOD{Eh z{5!iTAF6N*xh>ZM@GpN;>Q=hOJRR3kq5b5eeEXWh_^u~{K3~wS@m-Gv{b50`UdkV@ zYe7huW8bNV{4XD1%BN=dSOsov)|@YRAO26OtYFs3dv~+ydf65CRTgl!mR}5C(&F7( zv`Z@^HtkL|UnLs823!ZGfEz#tm;r7B_kdYo4wwfPfo0%1u*weBo^))$BRoa;<4=Z- z);11ZAkqy=61AF+u@=+zyAgPJzix&l8ig}2@NZ4QSb6?9Jl>@RRzjBvLopXiKOhzK zNur_mDON&{kbsR5etN?Stb>Ya8g^FT*fjOz2dYHNhu|1Ohat|FVPgVc0mslfjG_O^ z`>zUt*ASrM-%Qwq^-83Fp65HTZb9D#&w^X}2NKbspjU(A(fPs$+6R8Pm~`Bd!4I}0 zFeM~>0-h}*{d_(l0KSES_B=lh-iv`=<#`)8J_{Yxcwqp5Xp*^S-EF`6&J=X8-rm{H8d*6KX&6}CGuX4S5tsomh zo}$au)ix5fjm4|S%zlArxE3oP8Ia6Dnj$mpc*(#XKcjQo`-#&+EqD-b5}lXK#B(5 z>S9UcJCntd6?H6oBv~rVDIMj(hIolXuhchmpslKXP_xl&IUE1=`KIgh^W5+7G=?5DiIUi60@RiZq>jQF_uncy0nPZH%+N&;Pk^FYT#nxO6`+TI_5$EyT^ z0;=3n6>U4vw{-elNO-%v9q1qvMS-_F^+i;eBATZ&x2Eq$$RVy4d<&e=C42_27%7LTRs9R_q(Hfi4*w3k zqs!j}w==;L92gCcj82CF2^yQGF@p6S zjWerPJ_IqDip4XLbSA}acnfU9+ihqY*{;_oEVJW2r