From 69adad54ad3695eeeb233034bdd1ee167009a1ab Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Wed, 24 Jul 2024 11:54:23 +0000 Subject: [PATCH] add test data --- test/testcases/array_test1.c | 21 + test/testcases/array_test1.data | 32 + test/testcases/array_test1.dump | 401 +++++++++++++ test/testcases/array_test2.c | 23 + test/testcases/array_test2.data | 35 ++ test/testcases/array_test2.dump | 410 +++++++++++++ test/testcases/basicopt1.c | 29 + test/testcases/basicopt1.data | 46 ++ test/testcases/basicopt1.dump | 451 +++++++++++++++ test/testcases/bulgarian.c | 128 ++++ test/testcases/bulgarian.data | 117 ++++ test/testcases/bulgarian.dump | 897 +++++++++++++++++++++++++++++ test/testcases/expr.c | 117 ++++ test/testcases/expr.data | 37 ++ test/testcases/expr.dump | 423 ++++++++++++++ test/testcases/gcd.c | 15 + test/testcases/gcd.data | 32 + test/testcases/gcd.dump | 398 +++++++++++++ test/testcases/hanoi.c | 30 + test/testcases/hanoi.data | 44 ++ test/testcases/hanoi.dump | 450 +++++++++++++++ test/testcases/io.inc | 14 + test/testcases/lvalue2.c | 10 + test/testcases/lvalue2.data | 25 + test/testcases/lvalue2.dump | 371 ++++++++++++ test/testcases/magic.c | 74 +++ test/testcases/magic.data | 80 +++ test/testcases/magic.dump | 612 ++++++++++++++++++++ test/testcases/manyarguments.c | 11 + test/testcases/manyarguments.data | 30 + test/testcases/manyarguments.dump | 390 +++++++++++++ test/testcases/multiarray.c | 37 ++ test/testcases/multiarray.data | 50 ++ test/testcases/multiarray.dump | 485 ++++++++++++++++ test/testcases/naive.c | 6 + test/testcases/naive.data | 13 + test/testcases/naive.dump | 70 +++ test/testcases/pi.c | 33 ++ test/testcases/pi.data | 52 ++ test/testcases/pi.dump | 594 +++++++++++++++++++ test/testcases/qsort.c | 44 ++ test/testcases/qsort.data | 55 ++ test/testcases/qsort.dump | 494 ++++++++++++++++ test/testcases/queens.c | 42 ++ test/testcases/queens.data | 63 ++ test/testcases/queens.dump | 534 +++++++++++++++++ test/testcases/statement_test.c | 52 ++ test/testcases/statement_test.data | 54 ++ test/testcases/statement_test.dump | 612 ++++++++++++++++++++ test/testcases/superloop.c | 38 ++ test/testcases/superloop.data | 49 ++ test/testcases/superloop.dump | 482 ++++++++++++++++ test/testcases/tak.c | 15 + test/testcases/tak.data | 35 ++ test/testcases/tak.dump | 409 +++++++++++++ 55 files changed, 10071 insertions(+) create mode 100644 test/testcases/array_test1.c create mode 100644 test/testcases/array_test1.data create mode 100644 test/testcases/array_test1.dump create mode 100644 test/testcases/array_test2.c create mode 100644 test/testcases/array_test2.data create mode 100644 test/testcases/array_test2.dump create mode 100644 test/testcases/basicopt1.c create mode 100644 test/testcases/basicopt1.data create mode 100644 test/testcases/basicopt1.dump create mode 100644 test/testcases/bulgarian.c create mode 100644 test/testcases/bulgarian.data create mode 100644 test/testcases/bulgarian.dump create mode 100644 test/testcases/expr.c create mode 100644 test/testcases/expr.data create mode 100644 test/testcases/expr.dump create mode 100644 test/testcases/gcd.c create mode 100644 test/testcases/gcd.data create mode 100644 test/testcases/gcd.dump create mode 100644 test/testcases/hanoi.c create mode 100644 test/testcases/hanoi.data create mode 100644 test/testcases/hanoi.dump create mode 100644 test/testcases/io.inc create mode 100644 test/testcases/lvalue2.c create mode 100644 test/testcases/lvalue2.data create mode 100644 test/testcases/lvalue2.dump create mode 100644 test/testcases/magic.c create mode 100644 test/testcases/magic.data create mode 100644 test/testcases/magic.dump create mode 100644 test/testcases/manyarguments.c create mode 100644 test/testcases/manyarguments.data create mode 100644 test/testcases/manyarguments.dump create mode 100644 test/testcases/multiarray.c create mode 100644 test/testcases/multiarray.data create mode 100644 test/testcases/multiarray.dump create mode 100644 test/testcases/naive.c create mode 100644 test/testcases/naive.data create mode 100644 test/testcases/naive.dump create mode 100644 test/testcases/pi.c create mode 100644 test/testcases/pi.data create mode 100644 test/testcases/pi.dump create mode 100644 test/testcases/qsort.c create mode 100644 test/testcases/qsort.data create mode 100644 test/testcases/qsort.dump create mode 100644 test/testcases/queens.c create mode 100644 test/testcases/queens.data create mode 100644 test/testcases/queens.dump create mode 100644 test/testcases/statement_test.c create mode 100644 test/testcases/statement_test.data create mode 100644 test/testcases/statement_test.dump create mode 100644 test/testcases/superloop.c create mode 100644 test/testcases/superloop.data create mode 100644 test/testcases/superloop.dump create mode 100644 test/testcases/tak.c create mode 100644 test/testcases/tak.data create mode 100644 test/testcases/tak.dump diff --git a/test/testcases/array_test1.c b/test/testcases/array_test1.c new file mode 100644 index 0000000..04d2429 --- /dev/null +++ b/test/testcases/array_test1.c @@ -0,0 +1,21 @@ +#include "io.inc" + +int a[4]; +int main() { + int b[4]; + int i; + for (i = 0; i < 4; i++) { + a[i] = 0; + b[i] = i + 1; + } + for (i = 0; i < 4; i++) { + printInt(a[i]); + } + + int *p; + p = b; + for (i = 0; i < 4; i++) { + printInt(p[i]); + } + return judgeResult % Mod; // 123 +} \ No newline at end of file diff --git a/test/testcases/array_test1.data b/test/testcases/array_test1.data new file mode 100644 index 0000000..822da3f --- /dev/null +++ b/test/testcases/array_test1.data @@ -0,0 +1,32 @@ +@00000000 +37 01 02 00 EF 10 00 04 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 07 1B 33 45 F5 00 13 05 D5 0A +23 28 A7 1A 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 07 1B B3 C7 D7 00 93 87 97 20 +23 28 F7 1A 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FE 23 2E 11 00 23 2C 81 00 +23 2A 91 00 37 14 00 00 93 07 04 1A 23 A0 07 00 +13 07 10 00 23 20 E1 00 23 A2 07 00 13 07 20 00 +23 22 E1 00 23 A4 07 00 13 07 30 00 23 24 E1 00 +23 A6 07 00 93 07 40 00 23 26 F1 00 13 04 04 1A +93 04 04 01 03 25 04 00 EF F0 9F F6 13 04 44 00 +E3 1A 94 FE 13 05 10 00 EF F0 9F F5 13 05 20 00 +EF F0 1F F5 13 05 30 00 EF F0 9F F4 13 05 40 00 +EF F0 1F F4 93 05 D0 0F B7 17 00 00 03 A5 07 1B +EF 00 C0 09 83 20 C1 01 03 24 81 01 83 24 41 01 +13 01 01 02 67 80 00 00 63 40 05 06 63 C6 05 06 +13 86 05 00 93 05 05 00 13 05 F0 FF 63 0C 06 02 +93 06 10 00 63 7A B6 00 63 58 C0 00 13 16 16 00 +93 96 16 00 E3 6A B6 FE 13 05 00 00 63 E6 C5 00 +B3 85 C5 40 33 65 D5 00 93 D6 16 00 13 56 16 00 +E3 96 06 FE 67 80 00 00 93 82 00 00 EF F0 5F FB +13 85 05 00 67 80 02 00 33 05 A0 40 63 D8 05 00 +B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 93 82 00 00 +EF F0 1F F9 33 05 A0 40 67 80 02 00 93 82 00 00 +63 CA 05 00 63 4C 05 00 EF F0 9F F7 13 85 05 00 +67 80 02 00 B3 05 B0 40 E3 58 05 FE 33 05 A0 40 +EF F0 1F F6 33 05 B0 40 67 80 02 00 +@0000119C +FD 00 00 00 diff --git a/test/testcases/array_test1.dump b/test/testcases/array_test1.dump new file mode 100644 index 0000000..bc67f5f --- /dev/null +++ b/test/testcases/array_test1.dump @@ -0,0 +1,401 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 040010ef jal ra,1044
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 1b072783 lw a5,432(a4) # 11b0 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 1aa72823 sw a0,432(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 1b072683 lw a3,432(a4) # 11b0 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 1af72823 sw a5,432(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044
: + 1044: fe010113 addi sp,sp,-32 # 1ffe0 <__heap_start+0x1dfe0> + 1048: 00112e23 sw ra,28(sp) + 104c: 00812c23 sw s0,24(sp) + 1050: 00912a23 sw s1,20(sp) + 1054: 00001437 lui s0,0x1 + 1058: 1a040793 addi a5,s0,416 # 11a0 <__bss_start> + 105c: 0007a023 sw zero,0(a5) + 1060: 00100713 li a4,1 + 1064: 00e12023 sw a4,0(sp) + 1068: 0007a223 sw zero,4(a5) + 106c: 00200713 li a4,2 + 1070: 00e12223 sw a4,4(sp) + 1074: 0007a423 sw zero,8(a5) + 1078: 00300713 li a4,3 + 107c: 00e12423 sw a4,8(sp) + 1080: 0007a623 sw zero,12(a5) + 1084: 00400793 li a5,4 + 1088: 00f12623 sw a5,12(sp) + 108c: 1a040413 addi s0,s0,416 + 1090: 01040493 addi s1,s0,16 + 1094: 00042503 lw a0,0(s0) + 1098: f69ff0ef jal ra,1000 + 109c: 00440413 addi s0,s0,4 + 10a0: fe941ae3 bne s0,s1,1094 + 10a4: 00100513 li a0,1 + 10a8: f59ff0ef jal ra,1000 + 10ac: 00200513 li a0,2 + 10b0: f51ff0ef jal ra,1000 + 10b4: 00300513 li a0,3 + 10b8: f49ff0ef jal ra,1000 + 10bc: 00400513 li a0,4 + 10c0: f41ff0ef jal ra,1000 + 10c4: 0fd00593 li a1,253 + 10c8: 000017b7 lui a5,0x1 + 10cc: 1b07a503 lw a0,432(a5) # 11b0 <__bss_end> + 10d0: 09c000ef jal ra,116c <__modsi3> + 10d4: 01c12083 lw ra,28(sp) + 10d8: 01812403 lw s0,24(sp) + 10dc: 01412483 lw s1,20(sp) + 10e0: 02010113 addi sp,sp,32 + 10e4: 00008067 ret + +000010e8 <__divsi3>: + 10e8: 06054063 bltz a0,1148 <__umodsi3+0x10> + 10ec: 0605c663 bltz a1,1158 <__umodsi3+0x20> + +000010f0 <__udivsi3>: + 10f0: 00058613 mv a2,a1 + 10f4: 00050593 mv a1,a0 + 10f8: fff00513 li a0,-1 + 10fc: 02060c63 beqz a2,1134 <__udivsi3+0x44> + 1100: 00100693 li a3,1 + 1104: 00b67a63 bgeu a2,a1,1118 <__udivsi3+0x28> + 1108: 00c05863 blez a2,1118 <__udivsi3+0x28> + 110c: 00161613 slli a2,a2,0x1 + 1110: 00169693 slli a3,a3,0x1 + 1114: feb66ae3 bltu a2,a1,1108 <__udivsi3+0x18> + 1118: 00000513 li a0,0 + 111c: 00c5e663 bltu a1,a2,1128 <__udivsi3+0x38> + 1120: 40c585b3 sub a1,a1,a2 + 1124: 00d56533 or a0,a0,a3 + 1128: 0016d693 srli a3,a3,0x1 + 112c: 00165613 srli a2,a2,0x1 + 1130: fe0696e3 bnez a3,111c <__udivsi3+0x2c> + 1134: 00008067 ret + +00001138 <__umodsi3>: + 1138: 00008293 mv t0,ra + 113c: fb5ff0ef jal ra,10f0 <__udivsi3> + 1140: 00058513 mv a0,a1 + 1144: 00028067 jr t0 + 1148: 40a00533 neg a0,a0 + 114c: 0005d863 bgez a1,115c <__umodsi3+0x24> + 1150: 40b005b3 neg a1,a1 + 1154: f9dff06f j 10f0 <__udivsi3> + 1158: 40b005b3 neg a1,a1 + 115c: 00008293 mv t0,ra + 1160: f91ff0ef jal ra,10f0 <__udivsi3> + 1164: 40a00533 neg a0,a0 + 1168: 00028067 jr t0 + +0000116c <__modsi3>: + 116c: 00008293 mv t0,ra + 1170: 0005ca63 bltz a1,1184 <__modsi3+0x18> + 1174: 00054c63 bltz a0,118c <__modsi3+0x20> + 1178: f79ff0ef jal ra,10f0 <__udivsi3> + 117c: 00058513 mv a0,a1 + 1180: 00028067 jr t0 + 1184: 40b005b3 neg a1,a1 + 1188: fe0558e3 bgez a0,1178 <__modsi3+0xc> + 118c: 40a00533 neg a0,a0 + 1190: f61ff0ef jal ra,10f0 <__udivsi3> + 1194: 40b00533 neg a0,a1 + 1198: 00028067 jr t0 + +Disassembly of section .srodata: + +0000119c : + 119c: 00fd addi ra,ra,31 + ... + +Disassembly of section .bss: + +000011a0 : + ... + +Disassembly of section .sbss: + +000011b0 : + 11b0: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 10e8 addi a0,sp,108 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 10e8 addi a0,sp,108 + 12: 0000 unimp + 14: 119c addi a5,sp,224 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 10e8 addi a0,sp,108 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/array_test2.c b/test/testcases/array_test2.c new file mode 100644 index 0000000..3ccce3b --- /dev/null +++ b/test/testcases/array_test2.c @@ -0,0 +1,23 @@ +#include "io.inc" + +int a[4]; +int *pa = a; +int main() { + int *pb[4]; + int i; + pb[0] = pa; + pb[1] = pa; + pb[2] = pa; + pb[3] = pa; + printInt(4); + for (i = 0; i < 4; i++) + pb[0][i] = i + 1; + for (i = 0; i < 4; i++) + printInt(pb[1][i]); + + for (i = 0; i < 4; i++) + pb[2][i] = 0; + for (i = 0; i < 4; i++) + printInt(pb[3][i]); + return judgeResult % Mod; // 43 +} diff --git a/test/testcases/array_test2.data b/test/testcases/array_test2.data new file mode 100644 index 0000000..c459eb0 --- /dev/null +++ b/test/testcases/array_test2.data @@ -0,0 +1,35 @@ +@00000000 +37 01 02 00 EF 10 00 04 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 07 1C 33 45 F5 00 13 05 D5 0A +23 20 A7 1C 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 07 1C B3 C7 D7 00 93 87 97 20 +23 20 F7 1C 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FE 23 2E 11 00 23 2C 81 00 +23 2A 91 00 23 28 21 01 23 26 31 01 B7 17 00 00 +03 A9 C7 1A 13 05 40 00 EF F0 9F F9 93 07 10 00 +23 20 F9 00 93 07 20 00 23 22 F9 00 93 07 30 00 +23 24 F9 00 93 07 40 00 23 26 F9 00 13 04 09 00 +93 09 09 01 93 04 09 00 03 A5 04 00 EF F0 5F F6 +93 84 44 00 E3 9A 34 FF 23 20 09 00 23 22 09 00 +23 24 09 00 23 26 09 00 03 25 04 00 EF F0 5F F4 +13 04 44 00 E3 9A 89 FE 93 05 D0 0F B7 17 00 00 +03 A5 07 1C EF 00 40 0A 83 20 C1 01 03 24 81 01 +83 24 41 01 03 29 01 01 83 29 C1 00 13 01 01 02 +67 80 00 00 63 40 05 06 63 C6 05 06 13 86 05 00 +93 05 05 00 13 05 F0 FF 63 0C 06 02 93 06 10 00 +63 7A B6 00 63 58 C0 00 13 16 16 00 93 96 16 00 +E3 6A B6 FE 13 05 00 00 63 E6 C5 00 B3 85 C5 40 +33 65 D5 00 93 D6 16 00 13 56 16 00 E3 96 06 FE +67 80 00 00 93 82 00 00 EF F0 5F FB 13 85 05 00 +67 80 02 00 33 05 A0 40 63 D8 05 00 B3 05 B0 40 +6F F0 DF F9 B3 05 B0 40 93 82 00 00 EF F0 1F F9 +33 05 A0 40 67 80 02 00 93 82 00 00 63 CA 05 00 +63 4C 05 00 EF F0 9F F7 13 85 05 00 67 80 02 00 +B3 05 B0 40 E3 58 05 FE 33 05 A0 40 EF F0 1F F6 +33 05 B0 40 67 80 02 00 +@000011A8 +FD 00 00 00 +@000011AC +B0 11 00 00 diff --git a/test/testcases/array_test2.dump b/test/testcases/array_test2.dump new file mode 100644 index 0000000..b718208 --- /dev/null +++ b/test/testcases/array_test2.dump @@ -0,0 +1,410 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 040010ef jal ra,1044
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 1c072783 lw a5,448(a4) # 11c0 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 1ca72023 sw a0,448(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 1c072683 lw a3,448(a4) # 11c0 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 1cf72023 sw a5,448(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044
: + 1044: fe010113 addi sp,sp,-32 # 1ffe0 <__heap_start+0x1dfe0> + 1048: 00112e23 sw ra,28(sp) + 104c: 00812c23 sw s0,24(sp) + 1050: 00912a23 sw s1,20(sp) + 1054: 01212823 sw s2,16(sp) + 1058: 01312623 sw s3,12(sp) + 105c: 000017b7 lui a5,0x1 + 1060: 1ac7a903 lw s2,428(a5) # 11ac <__bss_start> + 1064: 00400513 li a0,4 + 1068: f99ff0ef jal ra,1000 + 106c: 00100793 li a5,1 + 1070: 00f92023 sw a5,0(s2) + 1074: 00200793 li a5,2 + 1078: 00f92223 sw a5,4(s2) + 107c: 00300793 li a5,3 + 1080: 00f92423 sw a5,8(s2) + 1084: 00400793 li a5,4 + 1088: 00f92623 sw a5,12(s2) + 108c: 00090413 mv s0,s2 + 1090: 01090993 addi s3,s2,16 + 1094: 00090493 mv s1,s2 + 1098: 0004a503 lw a0,0(s1) + 109c: f65ff0ef jal ra,1000 + 10a0: 00448493 addi s1,s1,4 + 10a4: ff349ae3 bne s1,s3,1098 + 10a8: 00092023 sw zero,0(s2) + 10ac: 00092223 sw zero,4(s2) + 10b0: 00092423 sw zero,8(s2) + 10b4: 00092623 sw zero,12(s2) + 10b8: 00042503 lw a0,0(s0) + 10bc: f45ff0ef jal ra,1000 + 10c0: 00440413 addi s0,s0,4 + 10c4: fe899ae3 bne s3,s0,10b8 + 10c8: 0fd00593 li a1,253 + 10cc: 000017b7 lui a5,0x1 + 10d0: 1c07a503 lw a0,448(a5) # 11c0 <__bss_end> + 10d4: 0a4000ef jal ra,1178 <__modsi3> + 10d8: 01c12083 lw ra,28(sp) + 10dc: 01812403 lw s0,24(sp) + 10e0: 01412483 lw s1,20(sp) + 10e4: 01012903 lw s2,16(sp) + 10e8: 00c12983 lw s3,12(sp) + 10ec: 02010113 addi sp,sp,32 + 10f0: 00008067 ret + +000010f4 <__divsi3>: + 10f4: 06054063 bltz a0,1154 <__umodsi3+0x10> + 10f8: 0605c663 bltz a1,1164 <__umodsi3+0x20> + +000010fc <__udivsi3>: + 10fc: 00058613 mv a2,a1 + 1100: 00050593 mv a1,a0 + 1104: fff00513 li a0,-1 + 1108: 02060c63 beqz a2,1140 <__udivsi3+0x44> + 110c: 00100693 li a3,1 + 1110: 00b67a63 bgeu a2,a1,1124 <__udivsi3+0x28> + 1114: 00c05863 blez a2,1124 <__udivsi3+0x28> + 1118: 00161613 slli a2,a2,0x1 + 111c: 00169693 slli a3,a3,0x1 + 1120: feb66ae3 bltu a2,a1,1114 <__udivsi3+0x18> + 1124: 00000513 li a0,0 + 1128: 00c5e663 bltu a1,a2,1134 <__udivsi3+0x38> + 112c: 40c585b3 sub a1,a1,a2 + 1130: 00d56533 or a0,a0,a3 + 1134: 0016d693 srli a3,a3,0x1 + 1138: 00165613 srli a2,a2,0x1 + 113c: fe0696e3 bnez a3,1128 <__udivsi3+0x2c> + 1140: 00008067 ret + +00001144 <__umodsi3>: + 1144: 00008293 mv t0,ra + 1148: fb5ff0ef jal ra,10fc <__udivsi3> + 114c: 00058513 mv a0,a1 + 1150: 00028067 jr t0 + 1154: 40a00533 neg a0,a0 + 1158: 0005d863 bgez a1,1168 <__umodsi3+0x24> + 115c: 40b005b3 neg a1,a1 + 1160: f9dff06f j 10fc <__udivsi3> + 1164: 40b005b3 neg a1,a1 + 1168: 00008293 mv t0,ra + 116c: f91ff0ef jal ra,10fc <__udivsi3> + 1170: 40a00533 neg a0,a0 + 1174: 00028067 jr t0 + +00001178 <__modsi3>: + 1178: 00008293 mv t0,ra + 117c: 0005ca63 bltz a1,1190 <__modsi3+0x18> + 1180: 00054c63 bltz a0,1198 <__modsi3+0x20> + 1184: f79ff0ef jal ra,10fc <__udivsi3> + 1188: 00058513 mv a0,a1 + 118c: 00028067 jr t0 + 1190: 40b005b3 neg a1,a1 + 1194: fe0558e3 bgez a0,1184 <__modsi3+0xc> + 1198: 40a00533 neg a0,a0 + 119c: f61ff0ef jal ra,10fc <__udivsi3> + 11a0: 40b00533 neg a0,a1 + 11a4: 00028067 jr t0 + +Disassembly of section .srodata: + +000011a8 : + 11a8: 00fd addi ra,ra,31 + ... + +Disassembly of section .sdata: + +000011ac : + 11ac: 11b0 addi a2,sp,232 + ... + +Disassembly of section .bss: + +000011b0 : + ... + +Disassembly of section .sbss: + +000011c0 : + 11c0: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 10f4 addi a3,sp,108 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 10f4 addi a3,sp,108 + 12: 0000 unimp + 14: 11a8 addi a0,sp,232 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 10f4 addi a3,sp,108 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/basicopt1.c b/test/testcases/basicopt1.c new file mode 100644 index 0000000..2093f4b --- /dev/null +++ b/test/testcases/basicopt1.c @@ -0,0 +1,29 @@ +#include "io.inc" + +int main() { + int a[100][100]; + int i; + int j; + int sum = 0; + + for (i = 0; i < 100; i++) + for (j = 0; j < 100; j++) + a[i][j] = 0; + int quotient; + int remainder; + for (i = 0; i < 100; i++) + if (i > 20 && i < 80) { + for (j = 0; j < 100; j++) + if (j > 5 || i < 90) { + quotient = j * 4 / 100; + remainder = j * 4 % 100; + a[i + quotient][remainder] = j + (100 - 1 + 1 - 1 + 1) / 2; + } + } + + for (i = 0; i < 100; i++) + for (j = 0; j < 100; j++) + sum = sum + a[i][j]; + printInt(sum); + return judgeResult % Mod; // 88 +} diff --git a/test/testcases/basicopt1.data b/test/testcases/basicopt1.data new file mode 100644 index 0000000..7db4ca1 --- /dev/null +++ b/test/testcases/basicopt1.data @@ -0,0 +1,46 @@ +@00000000 +37 01 02 00 EF 10 00 04 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 C7 27 33 45 F5 00 13 05 D5 0A +23 2E A7 26 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 C7 27 B3 C7 D7 00 93 87 97 20 +23 2E F7 26 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 81 23 26 11 7E 23 24 81 7E +23 22 91 7E 23 20 21 7F 23 2E 31 7D 23 2C 41 7D +23 2A 51 7D 23 28 61 7D 23 26 71 7D 23 24 81 7D +37 73 FF FF 13 03 03 B8 33 01 61 00 37 64 FF FF +37 A7 00 00 93 07 07 C4 B3 87 27 00 33 84 87 00 +13 04 04 55 93 07 07 DD 33 09 F1 00 13 07 04 00 +6F 00 C0 00 13 07 07 19 63 0C 27 01 93 07 07 E7 +23 A0 07 00 93 87 47 00 E3 9C E7 FE 6F F0 9F FE +93 04 10 00 13 0A A0 03 93 09 30 06 37 6B FF FF +B7 A7 00 00 93 87 07 C4 B3 87 27 00 33 8B 67 01 +6F 00 C0 05 93 0B 00 00 93 05 90 01 13 85 0B 00 +EF 00 40 0D 33 0C 55 01 93 05 40 06 13 95 2B 00 +EF 00 80 14 93 17 1C 00 B3 87 87 01 93 97 37 00 +B3 87 87 01 93 97 27 00 B3 87 A7 00 93 97 27 00 +B3 07 FB 00 13 87 2B 03 23 A0 E7 3C 93 8B 1B 00 +93 07 40 06 E3 9A FB FA 93 84 14 00 93 8A F4 FF +93 87 A4 FE E3 70 FA FA E3 D8 99 FE 13 05 00 00 +6F 00 C0 00 13 04 04 19 63 0E 24 01 93 07 04 E7 +03 A7 07 00 33 05 E5 00 93 87 47 00 E3 9A 87 FE +6F F0 5F FE EF F0 DF E8 93 05 D0 0F B7 17 00 00 +03 A5 C7 27 EF 00 40 0C 37 93 00 00 13 03 03 48 +33 01 61 00 83 20 C1 7E 03 24 81 7E 83 24 41 7E +03 29 01 7E 83 29 C1 7D 03 2A 81 7D 83 2A 41 7D +03 2B 01 7D 83 2B C1 7C 03 2C 81 7C 13 01 01 7F +67 80 00 00 63 40 05 06 63 C6 05 06 13 86 05 00 +93 05 05 00 13 05 F0 FF 63 0C 06 02 93 06 10 00 +63 7A B6 00 63 58 C0 00 13 16 16 00 93 96 16 00 +E3 6A B6 FE 13 05 00 00 63 E6 C5 00 B3 85 C5 40 +33 65 D5 00 93 D6 16 00 13 56 16 00 E3 96 06 FE +67 80 00 00 93 82 00 00 EF F0 5F FB 13 85 05 00 +67 80 02 00 33 05 A0 40 63 D8 05 00 B3 05 B0 40 +6F F0 DF F9 B3 05 B0 40 93 82 00 00 EF F0 1F F9 +33 05 A0 40 67 80 02 00 93 82 00 00 63 CA 05 00 +63 4C 05 00 EF F0 9F F7 13 85 05 00 67 80 02 00 +B3 05 B0 40 E3 58 05 FE 33 05 A0 40 EF F0 1F F6 +33 05 B0 40 67 80 02 00 +@00001278 +FD 00 00 00 diff --git a/test/testcases/basicopt1.dump b/test/testcases/basicopt1.dump new file mode 100644 index 0000000..16066d0 --- /dev/null +++ b/test/testcases/basicopt1.dump @@ -0,0 +1,451 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 040010ef jal ra,1044
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 27c72783 lw a5,636(a4) # 127c <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 26a72e23 sw a0,636(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 27c72683 lw a3,636(a4) # 127c <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 26f72e23 sw a5,636(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044
: + 1044: 81010113 addi sp,sp,-2032 # 1f810 <__heap_start+0x1d810> + 1048: 7e112623 sw ra,2028(sp) + 104c: 7e812423 sw s0,2024(sp) + 1050: 7e912223 sw s1,2020(sp) + 1054: 7f212023 sw s2,2016(sp) + 1058: 7d312e23 sw s3,2012(sp) + 105c: 7d412c23 sw s4,2008(sp) + 1060: 7d512a23 sw s5,2004(sp) + 1064: 7d612823 sw s6,2000(sp) + 1068: 7d712623 sw s7,1996(sp) + 106c: 7d812423 sw s8,1992(sp) + 1070: ffff7337 lui t1,0xffff7 + 1074: b8030313 addi t1,t1,-1152 # ffff6b80 <__heap_start+0xffff4b80> + 1078: 00610133 add sp,sp,t1 + 107c: ffff6437 lui s0,0xffff6 + 1080: 0000a737 lui a4,0xa + 1084: c4070793 addi a5,a4,-960 # 9c40 <__heap_start+0x7c40> + 1088: 002787b3 add a5,a5,sp + 108c: 00878433 add s0,a5,s0 + 1090: 55040413 addi s0,s0,1360 # ffff6550 <__heap_start+0xffff4550> + 1094: dd070793 addi a5,a4,-560 + 1098: 00f10933 add s2,sp,a5 + 109c: 00040713 mv a4,s0 + 10a0: 00c0006f j 10ac + 10a4: 19070713 addi a4,a4,400 + 10a8: 01270c63 beq a4,s2,10c0 + 10ac: e7070793 addi a5,a4,-400 + 10b0: 0007a023 sw zero,0(a5) + 10b4: 00478793 addi a5,a5,4 + 10b8: fee79ce3 bne a5,a4,10b0 + 10bc: fe9ff06f j 10a4 + 10c0: 00100493 li s1,1 + 10c4: 03a00a13 li s4,58 + 10c8: 06300993 li s3,99 + 10cc: ffff6b37 lui s6,0xffff6 + 10d0: 0000a7b7 lui a5,0xa + 10d4: c4078793 addi a5,a5,-960 # 9c40 <__heap_start+0x7c40> + 10d8: 002787b3 add a5,a5,sp + 10dc: 01678b33 add s6,a5,s6 + 10e0: 05c0006f j 113c + 10e4: 00000b93 li s7,0 + 10e8: 01900593 li a1,25 + 10ec: 000b8513 mv a0,s7 + 10f0: 0d4000ef jal ra,11c4 <__divsi3> + 10f4: 01550c33 add s8,a0,s5 + 10f8: 06400593 li a1,100 + 10fc: 002b9513 slli a0,s7,0x2 + 1100: 148000ef jal ra,1248 <__modsi3> + 1104: 001c1793 slli a5,s8,0x1 + 1108: 018787b3 add a5,a5,s8 + 110c: 00379793 slli a5,a5,0x3 + 1110: 018787b3 add a5,a5,s8 + 1114: 00279793 slli a5,a5,0x2 + 1118: 00a787b3 add a5,a5,a0 + 111c: 00279793 slli a5,a5,0x2 + 1120: 00fb07b3 add a5,s6,a5 + 1124: 032b8713 addi a4,s7,50 + 1128: 3ce7a023 sw a4,960(a5) + 112c: 001b8b93 addi s7,s7,1 + 1130: 06400793 li a5,100 + 1134: fafb9ae3 bne s7,a5,10e8 + 1138: 00148493 addi s1,s1,1 + 113c: fff48a93 addi s5,s1,-1 + 1140: fea48793 addi a5,s1,-22 + 1144: fafa70e3 bgeu s4,a5,10e4 + 1148: fe99d8e3 bge s3,s1,1138 + 114c: 00000513 li a0,0 + 1150: 00c0006f j 115c + 1154: 19040413 addi s0,s0,400 + 1158: 01240e63 beq s0,s2,1174 + 115c: e7040793 addi a5,s0,-400 + 1160: 0007a703 lw a4,0(a5) + 1164: 00e50533 add a0,a0,a4 + 1168: 00478793 addi a5,a5,4 + 116c: fe879ae3 bne a5,s0,1160 + 1170: fe5ff06f j 1154 + 1174: e8dff0ef jal ra,1000 + 1178: 0fd00593 li a1,253 + 117c: 000017b7 lui a5,0x1 + 1180: 27c7a503 lw a0,636(a5) # 127c <__bss_end> + 1184: 0c4000ef jal ra,1248 <__modsi3> + 1188: 00009337 lui t1,0x9 + 118c: 48030313 addi t1,t1,1152 # 9480 <__heap_start+0x7480> + 1190: 00610133 add sp,sp,t1 + 1194: 7ec12083 lw ra,2028(sp) + 1198: 7e812403 lw s0,2024(sp) + 119c: 7e412483 lw s1,2020(sp) + 11a0: 7e012903 lw s2,2016(sp) + 11a4: 7dc12983 lw s3,2012(sp) + 11a8: 7d812a03 lw s4,2008(sp) + 11ac: 7d412a83 lw s5,2004(sp) + 11b0: 7d012b03 lw s6,2000(sp) + 11b4: 7cc12b83 lw s7,1996(sp) + 11b8: 7c812c03 lw s8,1992(sp) + 11bc: 7f010113 addi sp,sp,2032 + 11c0: 00008067 ret + +000011c4 <__divsi3>: + 11c4: 06054063 bltz a0,1224 <__umodsi3+0x10> + 11c8: 0605c663 bltz a1,1234 <__umodsi3+0x20> + +000011cc <__udivsi3>: + 11cc: 00058613 mv a2,a1 + 11d0: 00050593 mv a1,a0 + 11d4: fff00513 li a0,-1 + 11d8: 02060c63 beqz a2,1210 <__udivsi3+0x44> + 11dc: 00100693 li a3,1 + 11e0: 00b67a63 bgeu a2,a1,11f4 <__udivsi3+0x28> + 11e4: 00c05863 blez a2,11f4 <__udivsi3+0x28> + 11e8: 00161613 slli a2,a2,0x1 + 11ec: 00169693 slli a3,a3,0x1 + 11f0: feb66ae3 bltu a2,a1,11e4 <__udivsi3+0x18> + 11f4: 00000513 li a0,0 + 11f8: 00c5e663 bltu a1,a2,1204 <__udivsi3+0x38> + 11fc: 40c585b3 sub a1,a1,a2 + 1200: 00d56533 or a0,a0,a3 + 1204: 0016d693 srli a3,a3,0x1 + 1208: 00165613 srli a2,a2,0x1 + 120c: fe0696e3 bnez a3,11f8 <__udivsi3+0x2c> + 1210: 00008067 ret + +00001214 <__umodsi3>: + 1214: 00008293 mv t0,ra + 1218: fb5ff0ef jal ra,11cc <__udivsi3> + 121c: 00058513 mv a0,a1 + 1220: 00028067 jr t0 + 1224: 40a00533 neg a0,a0 + 1228: 0005d863 bgez a1,1238 <__umodsi3+0x24> + 122c: 40b005b3 neg a1,a1 + 1230: f9dff06f j 11cc <__udivsi3> + 1234: 40b005b3 neg a1,a1 + 1238: 00008293 mv t0,ra + 123c: f91ff0ef jal ra,11cc <__udivsi3> + 1240: 40a00533 neg a0,a0 + 1244: 00028067 jr t0 + +00001248 <__modsi3>: + 1248: 00008293 mv t0,ra + 124c: 0005ca63 bltz a1,1260 <__modsi3+0x18> + 1250: 00054c63 bltz a0,1268 <__modsi3+0x20> + 1254: f79ff0ef jal ra,11cc <__udivsi3> + 1258: 00058513 mv a0,a1 + 125c: 00028067 jr t0 + 1260: 40b005b3 neg a1,a1 + 1264: fe0558e3 bgez a0,1254 <__modsi3+0xc> + 1268: 40a00533 neg a0,a0 + 126c: f61ff0ef jal ra,11cc <__udivsi3> + 1270: 40b00533 neg a0,a1 + 1274: 00028067 jr t0 + +Disassembly of section .srodata: + +00001278 : + 1278: 00fd addi ra,ra,31 + ... + +Disassembly of section .sbss: + +0000127c : + 127c: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 11c4 addi s1,sp,228 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 11c4 addi s1,sp,228 + 12: 0000 unimp + 14: 1278 addi a4,sp,300 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 11c4 addi s1,sp,228 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/bulgarian.c b/test/testcases/bulgarian.c new file mode 100644 index 0000000..4dca11b --- /dev/null +++ b/test/testcases/bulgarian.c @@ -0,0 +1,128 @@ +#include "io.inc" +// Target: Simulate a Bulgarian-solitaire game. +// Possible opitimization: Dead code elimination, common expression, inline +// function, loop unrolling, etc. REMARKS: A funny game. If you like, you can +// try to prove that when n=1+2+..+i(i>0), the game will always stop +// and converge to the only solution: {1,2,...i}. :) + +int n; +int h; +int now; +int a[100]; +int A = 48271; +int M = 2147483647; +int Q; +int R; +int seed = 1; +int random() { + int tempseed = A * (seed % Q) - R * (seed / Q); + if (tempseed >= 0) + seed = tempseed; + else + seed = tempseed + M; + return seed; +} +void initialize(int val) { seed = val; } +void swap(int x, int y) { + int temp = a[x]; + a[x] = a[y]; + a[y] = temp; +} +int pd(int x) { + for (; h <= x; ++h) + if (x == h * (h + 1) / 2) + return 1; + return 0; +} +void show() { + int i; + for (i = 0; i < now; ++i) { + printInt(a[i]); + } +} +int win() { + int i; + int j; + int b[100]; + int temp; + if (now != h) + return 0; + for (j = 0; j < now; ++j) + b[j] = a[j]; + for (i = 0; i < now - 1; ++i) + for (j = i + 1; j < now; ++j) + if (b[i] > b[j]) { + temp = b[i]; + b[i] = b[j]; + b[j] = temp; + } + for (i = 0; i < now; ++i) + if (b[i] != i + 1) + return 0; + return 1; +} +void merge() { + int i; + for (i = 0; i < now; ++i) + if (a[i] == 0) { + int j; + for (j = i + 1; j < now; ++j) + if (a[j] != 0) { + swap(i, j); + break; + } + } + for (i = 0; i < now; ++i) + if (a[i] == 0) { + now = i; + break; + } +} +void move() { + int i = 0; + for (; i < now;) { + --a[i]; + i = i + 1; + } + a[now] = now; + now++; +} +int main() { + int i = 0; + int temp = 0; + int count = 0; + n = 3 * 7 * 10; + h = 0; + Q = M / A; + R = M % A; + if (!pd(n)) { + // println("Sorry, the number n must be a number s.t. there exists i " + // "satisfying n=1+2+...+i"); + return 1; + } + // println("Let's start!"); + initialize(3654898); + now = random() % 10 + 1; + printInt(now); + for (; i < now - 1; ++i) { + a[i] = random() % 10 + 1; + while (a[i] + temp > n) + a[i] = random() % 10 + 1; + temp = temp + a[i]; + } + a[now - 1] = n - temp; + show(); + merge(); + while (!win()) { + // print("step "); + printInt(++count); + // println(":"); + move(); + merge(); + show(); + } + // print("Total: "); + printInt(count); + // println(" step(s)"); + return judgeResult % Mod; // 159 +} diff --git a/test/testcases/bulgarian.data b/test/testcases/bulgarian.data new file mode 100644 index 0000000..6b50516 --- /dev/null +++ b/test/testcases/bulgarian.data @@ -0,0 +1,117 @@ +@00000000 +37 01 02 00 EF 10 80 42 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 27 00 00 83 27 47 88 33 45 F5 00 13 05 D5 0A +23 22 A7 88 67 80 00 00 83 47 05 00 63 82 07 02 +37 27 00 00 83 26 47 88 B3 C7 D7 00 93 87 97 20 +23 22 F7 88 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FF 23 26 11 00 23 24 81 00 +23 22 91 00 23 20 21 01 B7 17 00 00 83 A4 47 6D +B7 17 00 00 03 A9 87 6E 93 05 09 00 13 85 04 00 +EF 00 00 63 B7 17 00 00 83 A5 C7 6D EF 00 C0 57 +13 04 05 00 93 05 09 00 13 85 04 00 EF 00 00 59 +B7 17 00 00 83 A5 C7 6E EF 00 00 56 33 05 A4 40 +63 42 05 02 B7 17 00 00 23 AA A7 6C 83 20 C1 00 +03 24 81 00 83 24 41 00 03 29 01 00 13 01 01 01 +67 80 00 00 B7 17 00 00 83 A7 87 6D 33 05 F5 00 +6F F0 5F FD B7 17 00 00 23 AA A7 6C 67 80 00 00 +B7 17 00 00 93 87 47 6F 13 15 25 00 33 85 A7 00 +03 27 05 00 93 95 25 00 B3 87 B7 00 83 A6 07 00 +23 20 D5 00 23 A0 E7 00 67 80 00 00 13 01 01 FF +23 26 11 00 23 24 81 00 23 22 91 00 23 20 21 01 +13 09 05 00 B7 17 00 00 03 A5 07 6F 63 40 A9 08 +13 04 15 00 93 05 04 00 EF 00 00 4C 93 57 F5 01 +33 85 A7 00 13 55 15 40 63 06 A9 06 63 4E 89 02 +93 04 14 00 93 05 04 00 13 85 04 00 EF 00 C0 49 +93 57 F5 01 B3 87 A7 00 93 D7 17 40 63 86 27 01 +13 84 04 00 6F F0 9F FD B7 17 00 00 23 A8 87 6E +13 05 10 00 6F 00 00 01 B7 17 00 00 23 A8 87 6E +13 05 00 00 83 20 C1 00 03 24 81 00 83 24 41 00 +03 29 01 00 13 01 01 01 67 80 00 00 13 05 00 00 +6F F0 5F FE 13 05 10 00 6F F0 DF FD B7 17 00 00 +83 A7 07 6E 63 5C F0 04 13 01 01 FF 23 26 11 00 +23 24 81 00 23 22 91 00 23 20 21 01 37 14 00 00 +13 04 44 6F 93 04 00 00 37 19 00 00 03 25 04 00 +EF F0 1F E1 93 84 14 00 13 04 44 00 83 27 09 6E +E3 C6 F4 FE 83 20 C1 00 03 24 81 00 83 24 41 00 +03 29 01 00 13 01 01 01 67 80 00 00 67 80 00 00 +B7 17 00 00 83 A8 07 6E B7 17 00 00 83 A7 07 6F +13 05 00 00 63 96 F8 0C 13 01 01 E7 63 56 10 03 +B7 17 00 00 93 87 47 6F 13 07 01 00 13 96 28 00 +33 06 F6 00 83 A6 07 00 23 20 D7 00 93 87 47 00 +13 07 47 00 E3 98 C7 FE 13 08 41 00 13 8E 08 00 +93 95 28 00 B3 85 25 00 13 06 08 00 13 05 00 00 +13 83 F8 FF 6F 00 80 02 93 87 47 00 63 8E B7 00 +03 27 C6 FF 83 A6 07 00 E3 D8 E6 FE 23 2E D6 FE +23 A0 E7 00 6F F0 5F FE 13 06 46 00 63 5A 65 00 +13 05 15 00 E3 5A 15 FF 93 07 06 00 6F F0 5F FD +63 58 10 03 03 25 01 00 93 07 10 00 63 16 F5 02 +63 8C C7 01 03 27 08 00 93 87 17 00 13 08 48 00 +E3 08 F7 FE 13 05 00 00 13 01 01 19 67 80 00 00 +13 05 10 00 6F F0 5F FF 13 05 00 00 6F F0 DF FE +67 80 00 00 B7 17 00 00 03 A7 07 6E 63 54 E0 0C +13 01 01 FF 23 26 11 00 23 24 81 00 23 22 91 00 +23 20 21 01 37 14 00 00 13 04 44 6F 93 04 00 00 +13 89 07 00 6F 00 C0 01 13 85 04 00 EF F0 5F DA +93 84 14 00 03 27 09 6E 13 04 44 00 63 DC E4 02 +83 27 04 00 E3 96 07 FE 93 85 14 00 E3 D2 E5 FE +83 27 44 00 E3 9A 07 FC 93 07 84 00 93 85 15 00 +E3 88 E5 FC 93 87 47 00 83 A6 C7 FF E3 88 06 FE +6F F0 9F FB 63 5C E0 02 B7 17 00 00 83 A7 47 6F +63 82 07 02 B7 16 00 00 93 86 86 6F 93 07 00 00 +93 87 17 00 63 0C F7 00 93 86 46 00 03 A6 C6 FF +E3 18 06 FE 37 17 00 00 23 20 F7 6E 83 20 C1 00 +03 24 81 00 83 24 41 00 03 29 01 00 13 01 01 01 +67 80 00 00 67 80 00 00 B7 17 00 00 03 A6 07 6E +63 54 C0 02 B7 17 00 00 93 87 47 6F 93 16 26 00 +B3 86 F6 00 03 A7 07 00 13 07 F7 FF 23 A0 E7 00 +93 87 47 00 E3 98 D7 FE B7 17 00 00 13 17 26 00 +93 87 47 6F B3 87 E7 00 23 A0 C7 00 13 06 16 00 +B7 17 00 00 23 A0 C7 6E 67 80 00 00 13 01 01 FE +23 2E 11 00 23 2C 81 00 23 2A 91 00 23 28 21 01 +23 26 31 01 23 24 41 01 23 22 51 01 B7 17 00 00 +13 07 20 0D 23 A2 E7 6E B7 17 00 00 23 A8 07 6E +B7 17 00 00 03 A4 87 6D B7 17 00 00 83 A4 C7 6D +93 85 04 00 13 05 04 00 EF 00 40 1A B7 17 00 00 +23 A4 A7 6E 93 85 04 00 13 05 04 00 EF 00 40 21 +B7 17 00 00 23 A6 A7 6E 13 05 20 0D EF F0 1F C7 +93 07 10 00 63 16 05 02 13 85 07 00 83 20 C1 01 +03 24 81 01 83 24 41 01 03 29 01 01 83 29 C1 00 +03 2A 81 00 83 2A 41 00 13 01 01 02 67 80 00 00 +37 17 00 00 B7 C7 37 00 93 87 27 4F 23 2A F7 6C +EF F0 5F B6 93 05 A0 00 EF 00 80 1B 13 05 15 00 +37 14 00 00 23 20 A4 6E EF F0 9F B0 83 27 04 6E +93 87 F7 FF 63 50 F0 08 B7 19 00 00 93 89 49 6F +13 04 00 00 13 0A 00 00 B7 14 00 00 B7 1A 00 00 +6F 00 C0 01 13 0A 1A 00 83 A7 0A 6E 93 87 F7 FF +93 89 49 00 13 04 05 00 63 58 FA 04 EF F0 9F B0 +93 05 A0 00 EF 00 C0 15 13 05 15 00 13 89 09 00 +23 A0 A9 00 33 05 85 00 83 A7 44 6E E3 D4 A7 FC +EF F0 5F AE 93 05 A0 00 EF 00 80 13 13 05 15 00 +23 20 A9 00 33 05 85 00 83 A7 44 6E E3 C2 A7 FE +6F F0 5F FA 13 05 00 00 37 17 00 00 93 97 27 00 +13 07 47 6F B3 07 F7 00 37 17 00 00 03 27 47 6E +33 05 A7 40 23 A0 A7 00 EF F0 5F C1 EF F0 9F D5 +13 04 00 00 6F 00 C0 01 13 04 14 00 13 05 04 00 +EF F0 1F A4 EF F0 5F E1 EF F0 DF D3 EF F0 1F BF +EF F0 1F C5 E3 02 05 FE 13 05 04 00 EF F0 5F A2 +93 05 D0 0F B7 27 00 00 03 A5 47 88 EF 00 40 0B +93 07 05 00 6F F0 5F EB 13 06 05 00 13 05 00 00 +93 F6 15 00 63 84 06 00 33 05 C5 00 93 D5 15 00 +13 16 16 00 E3 96 05 FE 67 80 00 00 63 40 05 06 +63 C6 05 06 13 86 05 00 93 05 05 00 13 05 F0 FF +63 0C 06 02 93 06 10 00 63 7A B6 00 63 58 C0 00 +13 16 16 00 93 96 16 00 E3 6A B6 FE 13 05 00 00 +63 E6 C5 00 B3 85 C5 40 33 65 D5 00 93 D6 16 00 +13 56 16 00 E3 96 06 FE 67 80 00 00 93 82 00 00 +EF F0 5F FB 13 85 05 00 67 80 02 00 33 05 A0 40 +63 D8 05 00 B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 +93 82 00 00 EF F0 1F F9 33 05 A0 40 67 80 02 00 +93 82 00 00 63 CA 05 00 63 4C 05 00 EF F0 9F F7 +13 85 05 00 67 80 02 00 B3 05 B0 40 E3 58 05 FE +33 05 A0 40 EF F0 1F F6 33 05 B0 40 67 80 02 00 +@000016D0 +FD 00 00 00 +@000016D4 +01 00 00 00 FF FF FF 7F 8F BC 00 00 diff --git a/test/testcases/bulgarian.dump b/test/testcases/bulgarian.dump new file mode 100644 index 0000000..fd373dd --- /dev/null +++ b/test/testcases/bulgarian.dump @@ -0,0 +1,897 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 428010ef jal ra,142c
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00002737 lui a4,0x2 + 1004: 88472783 lw a5,-1916(a4) # 1884 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 88a72223 sw a0,-1916(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00002737 lui a4,0x2 + 1024: 88472683 lw a3,-1916(a4) # 1884 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 88f72223 sw a5,-1916(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044 : + 1044: ff010113 addi sp,sp,-16 # 1fff0 <__heap_start+0x1dff0> + 1048: 00112623 sw ra,12(sp) + 104c: 00812423 sw s0,8(sp) + 1050: 00912223 sw s1,4(sp) + 1054: 01212023 sw s2,0(sp) + 1058: 000017b7 lui a5,0x1 + 105c: 6d47a483 lw s1,1748(a5) # 16d4 <__bss_start> + 1060: 000017b7 lui a5,0x1 + 1064: 6e87a903 lw s2,1768(a5) # 16e8 + 1068: 00090593 mv a1,s2 + 106c: 00048513 mv a0,s1 + 1070: 630000ef jal ra,16a0 <__modsi3> + 1074: 000017b7 lui a5,0x1 + 1078: 6dc7a583 lw a1,1756(a5) # 16dc + 107c: 57c000ef jal ra,15f8 <__mulsi3> + 1080: 00050413 mv s0,a0 + 1084: 00090593 mv a1,s2 + 1088: 00048513 mv a0,s1 + 108c: 590000ef jal ra,161c <__divsi3> + 1090: 000017b7 lui a5,0x1 + 1094: 6ec7a583 lw a1,1772(a5) # 16ec + 1098: 560000ef jal ra,15f8 <__mulsi3> + 109c: 40a40533 sub a0,s0,a0 + 10a0: 02054263 bltz a0,10c4 + 10a4: 000017b7 lui a5,0x1 + 10a8: 6ca7aa23 sw a0,1748(a5) # 16d4 <__bss_start> + 10ac: 00c12083 lw ra,12(sp) + 10b0: 00812403 lw s0,8(sp) + 10b4: 00412483 lw s1,4(sp) + 10b8: 00012903 lw s2,0(sp) + 10bc: 01010113 addi sp,sp,16 + 10c0: 00008067 ret + 10c4: 000017b7 lui a5,0x1 + 10c8: 6d87a783 lw a5,1752(a5) # 16d8 + 10cc: 00f50533 add a0,a0,a5 + 10d0: fd5ff06f j 10a4 + +000010d4 : + 10d4: 000017b7 lui a5,0x1 + 10d8: 6ca7aa23 sw a0,1748(a5) # 16d4 <__bss_start> + 10dc: 00008067 ret + +000010e0 : + 10e0: 000017b7 lui a5,0x1 + 10e4: 6f478793 addi a5,a5,1780 # 16f4 + 10e8: 00251513 slli a0,a0,0x2 + 10ec: 00a78533 add a0,a5,a0 + 10f0: 00052703 lw a4,0(a0) + 10f4: 00259593 slli a1,a1,0x2 + 10f8: 00b787b3 add a5,a5,a1 + 10fc: 0007a683 lw a3,0(a5) + 1100: 00d52023 sw a3,0(a0) + 1104: 00e7a023 sw a4,0(a5) + 1108: 00008067 ret + +0000110c : + 110c: ff010113 addi sp,sp,-16 + 1110: 00112623 sw ra,12(sp) + 1114: 00812423 sw s0,8(sp) + 1118: 00912223 sw s1,4(sp) + 111c: 01212023 sw s2,0(sp) + 1120: 00050913 mv s2,a0 + 1124: 000017b7 lui a5,0x1 + 1128: 6f07a503 lw a0,1776(a5) # 16f0 + 112c: 08a94063 blt s2,a0,11ac + 1130: 00150413 addi s0,a0,1 + 1134: 00040593 mv a1,s0 + 1138: 4c0000ef jal ra,15f8 <__mulsi3> + 113c: 01f55793 srli a5,a0,0x1f + 1140: 00a78533 add a0,a5,a0 + 1144: 40155513 srai a0,a0,0x1 + 1148: 06a90663 beq s2,a0,11b4 + 114c: 02894e63 blt s2,s0,1188 + 1150: 00140493 addi s1,s0,1 + 1154: 00040593 mv a1,s0 + 1158: 00048513 mv a0,s1 + 115c: 49c000ef jal ra,15f8 <__mulsi3> + 1160: 01f55793 srli a5,a0,0x1f + 1164: 00a787b3 add a5,a5,a0 + 1168: 4017d793 srai a5,a5,0x1 + 116c: 01278663 beq a5,s2,1178 + 1170: 00048413 mv s0,s1 + 1174: fd9ff06f j 114c + 1178: 000017b7 lui a5,0x1 + 117c: 6e87a823 sw s0,1776(a5) # 16f0 + 1180: 00100513 li a0,1 + 1184: 0100006f j 1194 + 1188: 000017b7 lui a5,0x1 + 118c: 6e87a823 sw s0,1776(a5) # 16f0 + 1190: 00000513 li a0,0 + 1194: 00c12083 lw ra,12(sp) + 1198: 00812403 lw s0,8(sp) + 119c: 00412483 lw s1,4(sp) + 11a0: 00012903 lw s2,0(sp) + 11a4: 01010113 addi sp,sp,16 + 11a8: 00008067 ret + 11ac: 00000513 li a0,0 + 11b0: fe5ff06f j 1194 + 11b4: 00100513 li a0,1 + 11b8: fddff06f j 1194 + +000011bc : + 11bc: 000017b7 lui a5,0x1 + 11c0: 6e07a783 lw a5,1760(a5) # 16e0 + 11c4: 04f05c63 blez a5,121c + 11c8: ff010113 addi sp,sp,-16 + 11cc: 00112623 sw ra,12(sp) + 11d0: 00812423 sw s0,8(sp) + 11d4: 00912223 sw s1,4(sp) + 11d8: 01212023 sw s2,0(sp) + 11dc: 00001437 lui s0,0x1 + 11e0: 6f440413 addi s0,s0,1780 # 16f4 + 11e4: 00000493 li s1,0 + 11e8: 00001937 lui s2,0x1 + 11ec: 00042503 lw a0,0(s0) + 11f0: e11ff0ef jal ra,1000 + 11f4: 00148493 addi s1,s1,1 + 11f8: 00440413 addi s0,s0,4 + 11fc: 6e092783 lw a5,1760(s2) # 16e0 + 1200: fef4c6e3 blt s1,a5,11ec + 1204: 00c12083 lw ra,12(sp) + 1208: 00812403 lw s0,8(sp) + 120c: 00412483 lw s1,4(sp) + 1210: 00012903 lw s2,0(sp) + 1214: 01010113 addi sp,sp,16 + 1218: 00008067 ret + 121c: 00008067 ret + +00001220 : + 1220: 000017b7 lui a5,0x1 + 1224: 6e07a883 lw a7,1760(a5) # 16e0 + 1228: 000017b7 lui a5,0x1 + 122c: 6f07a783 lw a5,1776(a5) # 16f0 + 1230: 00000513 li a0,0 + 1234: 0cf89663 bne a7,a5,1300 + 1238: e7010113 addi sp,sp,-400 + 123c: 03105663 blez a7,1268 + 1240: 000017b7 lui a5,0x1 + 1244: 6f478793 addi a5,a5,1780 # 16f4 + 1248: 00010713 mv a4,sp + 124c: 00289613 slli a2,a7,0x2 + 1250: 00f60633 add a2,a2,a5 + 1254: 0007a683 lw a3,0(a5) + 1258: 00d72023 sw a3,0(a4) + 125c: 00478793 addi a5,a5,4 + 1260: 00470713 addi a4,a4,4 + 1264: fec798e3 bne a5,a2,1254 + 1268: 00410813 addi a6,sp,4 + 126c: 00088e13 mv t3,a7 + 1270: 00289593 slli a1,a7,0x2 + 1274: 002585b3 add a1,a1,sp + 1278: 00080613 mv a2,a6 + 127c: 00000513 li a0,0 + 1280: fff88313 addi t1,a7,-1 + 1284: 0280006f j 12ac + 1288: 00478793 addi a5,a5,4 + 128c: 00b78e63 beq a5,a1,12a8 + 1290: ffc62703 lw a4,-4(a2) + 1294: 0007a683 lw a3,0(a5) + 1298: fee6d8e3 bge a3,a4,1288 + 129c: fed62e23 sw a3,-4(a2) + 12a0: 00e7a023 sw a4,0(a5) + 12a4: fe5ff06f j 1288 + 12a8: 00460613 addi a2,a2,4 + 12ac: 00655a63 bge a0,t1,12c0 + 12b0: 00150513 addi a0,a0,1 + 12b4: ff155ae3 bge a0,a7,12a8 + 12b8: 00060793 mv a5,a2 + 12bc: fd5ff06f j 1290 + 12c0: 03105863 blez a7,12f0 + 12c4: 00012503 lw a0,0(sp) + 12c8: 00100793 li a5,1 + 12cc: 02f51663 bne a0,a5,12f8 + 12d0: 01c78c63 beq a5,t3,12e8 + 12d4: 00082703 lw a4,0(a6) + 12d8: 00178793 addi a5,a5,1 + 12dc: 00480813 addi a6,a6,4 + 12e0: fef708e3 beq a4,a5,12d0 + 12e4: 00000513 li a0,0 + 12e8: 19010113 addi sp,sp,400 + 12ec: 00008067 ret + 12f0: 00100513 li a0,1 + 12f4: ff5ff06f j 12e8 + 12f8: 00000513 li a0,0 + 12fc: fedff06f j 12e8 + 1300: 00008067 ret + +00001304 : + 1304: 000017b7 lui a5,0x1 + 1308: 6e07a703 lw a4,1760(a5) # 16e0 + 130c: 0ce05463 blez a4,13d4 + 1310: ff010113 addi sp,sp,-16 + 1314: 00112623 sw ra,12(sp) + 1318: 00812423 sw s0,8(sp) + 131c: 00912223 sw s1,4(sp) + 1320: 01212023 sw s2,0(sp) + 1324: 00001437 lui s0,0x1 + 1328: 6f440413 addi s0,s0,1780 # 16f4 + 132c: 00000493 li s1,0 + 1330: 00078913 mv s2,a5 + 1334: 01c0006f j 1350 + 1338: 00048513 mv a0,s1 + 133c: da5ff0ef jal ra,10e0 + 1340: 00148493 addi s1,s1,1 + 1344: 6e092703 lw a4,1760(s2) + 1348: 00440413 addi s0,s0,4 + 134c: 02e4dc63 bge s1,a4,1384 + 1350: 00042783 lw a5,0(s0) + 1354: fe0796e3 bnez a5,1340 + 1358: 00148593 addi a1,s1,1 + 135c: fee5d2e3 bge a1,a4,1340 + 1360: 00442783 lw a5,4(s0) + 1364: fc079ae3 bnez a5,1338 + 1368: 00840793 addi a5,s0,8 + 136c: 00158593 addi a1,a1,1 + 1370: fce588e3 beq a1,a4,1340 + 1374: 00478793 addi a5,a5,4 + 1378: ffc7a683 lw a3,-4(a5) + 137c: fe0688e3 beqz a3,136c + 1380: fb9ff06f j 1338 + 1384: 02e05c63 blez a4,13bc + 1388: 000017b7 lui a5,0x1 + 138c: 6f47a783 lw a5,1780(a5) # 16f4 + 1390: 02078263 beqz a5,13b4 + 1394: 000016b7 lui a3,0x1 + 1398: 6f868693 addi a3,a3,1784 # 16f8 + 139c: 00000793 li a5,0 + 13a0: 00178793 addi a5,a5,1 + 13a4: 00f70c63 beq a4,a5,13bc + 13a8: 00468693 addi a3,a3,4 + 13ac: ffc6a603 lw a2,-4(a3) + 13b0: fe0618e3 bnez a2,13a0 + 13b4: 00001737 lui a4,0x1 + 13b8: 6ef72023 sw a5,1760(a4) # 16e0 + 13bc: 00c12083 lw ra,12(sp) + 13c0: 00812403 lw s0,8(sp) + 13c4: 00412483 lw s1,4(sp) + 13c8: 00012903 lw s2,0(sp) + 13cc: 01010113 addi sp,sp,16 + 13d0: 00008067 ret + 13d4: 00008067 ret + +000013d8 : + 13d8: 000017b7 lui a5,0x1 + 13dc: 6e07a603 lw a2,1760(a5) # 16e0 + 13e0: 02c05463 blez a2,1408 + 13e4: 000017b7 lui a5,0x1 + 13e8: 6f478793 addi a5,a5,1780 # 16f4 + 13ec: 00261693 slli a3,a2,0x2 + 13f0: 00f686b3 add a3,a3,a5 + 13f4: 0007a703 lw a4,0(a5) + 13f8: fff70713 addi a4,a4,-1 + 13fc: 00e7a023 sw a4,0(a5) + 1400: 00478793 addi a5,a5,4 + 1404: fed798e3 bne a5,a3,13f4 + 1408: 000017b7 lui a5,0x1 + 140c: 00261713 slli a4,a2,0x2 + 1410: 6f478793 addi a5,a5,1780 # 16f4 + 1414: 00e787b3 add a5,a5,a4 + 1418: 00c7a023 sw a2,0(a5) + 141c: 00160613 addi a2,a2,1 + 1420: 000017b7 lui a5,0x1 + 1424: 6ec7a023 sw a2,1760(a5) # 16e0 + 1428: 00008067 ret + +0000142c
: + 142c: fe010113 addi sp,sp,-32 + 1430: 00112e23 sw ra,28(sp) + 1434: 00812c23 sw s0,24(sp) + 1438: 00912a23 sw s1,20(sp) + 143c: 01212823 sw s2,16(sp) + 1440: 01312623 sw s3,12(sp) + 1444: 01412423 sw s4,8(sp) + 1448: 01512223 sw s5,4(sp) + 144c: 000017b7 lui a5,0x1 + 1450: 0d200713 li a4,210 + 1454: 6ee7a223 sw a4,1764(a5) # 16e4 + 1458: 000017b7 lui a5,0x1 + 145c: 6e07a823 sw zero,1776(a5) # 16f0 + 1460: 000017b7 lui a5,0x1 + 1464: 6d87a403 lw s0,1752(a5) # 16d8 + 1468: 000017b7 lui a5,0x1 + 146c: 6dc7a483 lw s1,1756(a5) # 16dc + 1470: 00048593 mv a1,s1 + 1474: 00040513 mv a0,s0 + 1478: 1a4000ef jal ra,161c <__divsi3> + 147c: 000017b7 lui a5,0x1 + 1480: 6ea7a423 sw a0,1768(a5) # 16e8 + 1484: 00048593 mv a1,s1 + 1488: 00040513 mv a0,s0 + 148c: 214000ef jal ra,16a0 <__modsi3> + 1490: 000017b7 lui a5,0x1 + 1494: 6ea7a623 sw a0,1772(a5) # 16ec + 1498: 0d200513 li a0,210 + 149c: c71ff0ef jal ra,110c + 14a0: 00100793 li a5,1 + 14a4: 02051663 bnez a0,14d0 + 14a8: 00078513 mv a0,a5 + 14ac: 01c12083 lw ra,28(sp) + 14b0: 01812403 lw s0,24(sp) + 14b4: 01412483 lw s1,20(sp) + 14b8: 01012903 lw s2,16(sp) + 14bc: 00c12983 lw s3,12(sp) + 14c0: 00812a03 lw s4,8(sp) + 14c4: 00412a83 lw s5,4(sp) + 14c8: 02010113 addi sp,sp,32 + 14cc: 00008067 ret + 14d0: 00001737 lui a4,0x1 + 14d4: 0037c7b7 lui a5,0x37c + 14d8: 4f278793 addi a5,a5,1266 # 37c4f2 <__heap_start+0x37a4f2> + 14dc: 6cf72a23 sw a5,1748(a4) # 16d4 <__bss_start> + 14e0: b65ff0ef jal ra,1044 + 14e4: 00a00593 li a1,10 + 14e8: 1b8000ef jal ra,16a0 <__modsi3> + 14ec: 00150513 addi a0,a0,1 + 14f0: 00001437 lui s0,0x1 + 14f4: 6ea42023 sw a0,1760(s0) # 16e0 + 14f8: b09ff0ef jal ra,1000 + 14fc: 6e042783 lw a5,1760(s0) + 1500: fff78793 addi a5,a5,-1 + 1504: 08f05063 blez a5,1584 + 1508: 000019b7 lui s3,0x1 + 150c: 6f498993 addi s3,s3,1780 # 16f4 + 1510: 00000413 li s0,0 + 1514: 00000a13 li s4,0 + 1518: 000014b7 lui s1,0x1 + 151c: 00001ab7 lui s5,0x1 + 1520: 01c0006f j 153c + 1524: 001a0a13 addi s4,s4,1 + 1528: 6e0aa783 lw a5,1760(s5) # 16e0 + 152c: fff78793 addi a5,a5,-1 + 1530: 00498993 addi s3,s3,4 + 1534: 00050413 mv s0,a0 + 1538: 04fa5863 bge s4,a5,1588 + 153c: b09ff0ef jal ra,1044 + 1540: 00a00593 li a1,10 + 1544: 15c000ef jal ra,16a0 <__modsi3> + 1548: 00150513 addi a0,a0,1 + 154c: 00098913 mv s2,s3 + 1550: 00a9a023 sw a0,0(s3) + 1554: 00850533 add a0,a0,s0 + 1558: 6e44a783 lw a5,1764(s1) # 16e4 + 155c: fca7d4e3 bge a5,a0,1524 + 1560: ae5ff0ef jal ra,1044 + 1564: 00a00593 li a1,10 + 1568: 138000ef jal ra,16a0 <__modsi3> + 156c: 00150513 addi a0,a0,1 + 1570: 00a92023 sw a0,0(s2) + 1574: 00850533 add a0,a0,s0 + 1578: 6e44a783 lw a5,1764(s1) + 157c: fea7c2e3 blt a5,a0,1560 + 1580: fa5ff06f j 1524 + 1584: 00000513 li a0,0 + 1588: 00001737 lui a4,0x1 + 158c: 00279793 slli a5,a5,0x2 + 1590: 6f470713 addi a4,a4,1780 # 16f4 + 1594: 00f707b3 add a5,a4,a5 + 1598: 00001737 lui a4,0x1 + 159c: 6e472703 lw a4,1764(a4) # 16e4 + 15a0: 40a70533 sub a0,a4,a0 + 15a4: 00a7a023 sw a0,0(a5) + 15a8: c15ff0ef jal ra,11bc + 15ac: d59ff0ef jal ra,1304 + 15b0: 00000413 li s0,0 + 15b4: 01c0006f j 15d0 + 15b8: 00140413 addi s0,s0,1 + 15bc: 00040513 mv a0,s0 + 15c0: a41ff0ef jal ra,1000 + 15c4: e15ff0ef jal ra,13d8 + 15c8: d3dff0ef jal ra,1304 + 15cc: bf1ff0ef jal ra,11bc + 15d0: c51ff0ef jal ra,1220 + 15d4: fe0502e3 beqz a0,15b8 + 15d8: 00040513 mv a0,s0 + 15dc: a25ff0ef jal ra,1000 + 15e0: 0fd00593 li a1,253 + 15e4: 000027b7 lui a5,0x2 + 15e8: 8847a503 lw a0,-1916(a5) # 1884 <__bss_end> + 15ec: 0b4000ef jal ra,16a0 <__modsi3> + 15f0: 00050793 mv a5,a0 + 15f4: eb5ff06f j 14a8 + +000015f8 <__mulsi3>: + 15f8: 00050613 mv a2,a0 + 15fc: 00000513 li a0,0 + 1600: 0015f693 andi a3,a1,1 + 1604: 00068463 beqz a3,160c <__mulsi3+0x14> + 1608: 00c50533 add a0,a0,a2 + 160c: 0015d593 srli a1,a1,0x1 + 1610: 00161613 slli a2,a2,0x1 + 1614: fe0596e3 bnez a1,1600 <__mulsi3+0x8> + 1618: 00008067 ret + +0000161c <__divsi3>: + 161c: 06054063 bltz a0,167c <__umodsi3+0x10> + 1620: 0605c663 bltz a1,168c <__umodsi3+0x20> + +00001624 <__udivsi3>: + 1624: 00058613 mv a2,a1 + 1628: 00050593 mv a1,a0 + 162c: fff00513 li a0,-1 + 1630: 02060c63 beqz a2,1668 <__udivsi3+0x44> + 1634: 00100693 li a3,1 + 1638: 00b67a63 bgeu a2,a1,164c <__udivsi3+0x28> + 163c: 00c05863 blez a2,164c <__udivsi3+0x28> + 1640: 00161613 slli a2,a2,0x1 + 1644: 00169693 slli a3,a3,0x1 + 1648: feb66ae3 bltu a2,a1,163c <__udivsi3+0x18> + 164c: 00000513 li a0,0 + 1650: 00c5e663 bltu a1,a2,165c <__udivsi3+0x38> + 1654: 40c585b3 sub a1,a1,a2 + 1658: 00d56533 or a0,a0,a3 + 165c: 0016d693 srli a3,a3,0x1 + 1660: 00165613 srli a2,a2,0x1 + 1664: fe0696e3 bnez a3,1650 <__udivsi3+0x2c> + 1668: 00008067 ret + +0000166c <__umodsi3>: + 166c: 00008293 mv t0,ra + 1670: fb5ff0ef jal ra,1624 <__udivsi3> + 1674: 00058513 mv a0,a1 + 1678: 00028067 jr t0 + 167c: 40a00533 neg a0,a0 + 1680: 0005d863 bgez a1,1690 <__umodsi3+0x24> + 1684: 40b005b3 neg a1,a1 + 1688: f9dff06f j 1624 <__udivsi3> + 168c: 40b005b3 neg a1,a1 + 1690: 00008293 mv t0,ra + 1694: f91ff0ef jal ra,1624 <__udivsi3> + 1698: 40a00533 neg a0,a0 + 169c: 00028067 jr t0 + +000016a0 <__modsi3>: + 16a0: 00008293 mv t0,ra + 16a4: 0005ca63 bltz a1,16b8 <__modsi3+0x18> + 16a8: 00054c63 bltz a0,16c0 <__modsi3+0x20> + 16ac: f79ff0ef jal ra,1624 <__udivsi3> + 16b0: 00058513 mv a0,a1 + 16b4: 00028067 jr t0 + 16b8: 40b005b3 neg a1,a1 + 16bc: fe0558e3 bgez a0,16ac <__modsi3+0xc> + 16c0: 40a00533 neg a0,a0 + 16c4: f61ff0ef jal ra,1624 <__udivsi3> + 16c8: 40b00533 neg a0,a1 + 16cc: 00028067 jr t0 + +Disassembly of section .srodata: + +000016d0 : + 16d0: 00fd addi ra,ra,31 + ... + +Disassembly of section .sdata: + +000016d4 : + 16d4: 0001 nop + ... + +000016d8 : + 16d8: ffff 0xffff + 16da: 7fff 0x7fff + +000016dc : + 16dc: 0000bc8f 0xbc8f + +Disassembly of section .bss: + +000016e0 : + 16e0: 0000 unimp + ... + +000016e4 : + 16e4: 0000 unimp + ... + +000016e8 : + 16e8: 0000 unimp + ... + +000016ec : + 16ec: 0000 unimp + ... + +000016f0 : + 16f0: 0000 unimp + ... + +000016f4 : + ... + +Disassembly of section .sbss: + +00001884 : + 1884: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 008e slli ra,ra,0x3 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0048 addi a0,sp,4 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6d00 flw fs0,24(a0) + 46: 6c75 lui s8,0x1d + 48: 6964 flw fs1,84(a0) + 4a: 00532e33 slt t3,t1,t0 + 4e: 0001 nop + 50: 0000 unimp + 52: 0500 addi s0,sp,640 + 54: f802 fsw ft0,48(sp) + 56: 0015 c.nop 5 + 58: 0300 addi s0,sp,384 + 5a: 0124 addi s1,sp,136 + 5c: 04090103 lb sp,64(s2) + 60: 0100 addi s0,sp,128 + 62: 04090203 lb tp,64(s2) + 66: 0100 addi s0,sp,128 + 68: 04090103 lb sp,64(s2) + 6c: 0100 addi s0,sp,128 + 6e: 04090103 lb sp,64(s2) + 72: 0100 addi s0,sp,128 + 74: 04090203 lb tp,64(s2) + 78: 0100 addi s0,sp,128 + 7a: 04090103 lb sp,64(s2) + 7e: 0100 addi s0,sp,128 + 80: 04090103 lb sp,64(s2) + 84: 0100 addi s0,sp,128 + 86: 04090103 lb sp,64(s2) + 8a: 0100 addi s0,sp,128 + 8c: 0409 addi s0,s0,2 + 8e: 0000 unimp + 90: 0101 addi sp,sp,0 + 92: 0164 addi s1,sp,140 + 94: 0000 unimp + 96: 0002 c.slli64 zero + 98: 0045 c.nop 17 + 9a: 0000 unimp + 9c: 0101 addi sp,sp,0 + 9e: 000d0efb 0xd0efb + a2: 0101 addi sp,sp,0 + a4: 0101 addi sp,sp,0 + a6: 0000 unimp + a8: 0100 addi s0,sp,128 + aa: 0000 unimp + ac: 2e01 jal 3bc + ae: 2f2e fld ft10,200(sp) + b0: 2e2e fld ft8,200(sp) + b2: 2f2e2e2f 0x2f2e2e2f + b6: 2f2e fld ft10,200(sp) + b8: 6972 flw fs2,28(sp) + ba: 2d766373 csrrsi t1,0x2d7,12 + be: 2f636367 0x2f636367 + c2: 696c flw fa1,84(a0) + c4: 6762 flw fa4,24(sp) + c6: 632f6363 bltu t5,s2,6ec + ca: 69666e6f jal t3,66760 <__heap_start+0x64760> + ce: 69722f67 0x69722f67 + d2: 00766373 csrrsi t1,0x7,12 + d6: 6400 flw fs0,8(s0) + d8: 7669 lui a2,0xffffa + da: 532e lw t1,232(sp) + dc: 0100 addi s0,sp,128 + de: 0000 unimp + e0: 0000 unimp + e2: 0205 addi tp,tp,1 + e4: 161c addi a5,sp,800 + e6: 0000 unimp + e8: 0100c403 lbu s0,16(ra) + ec: 04090103 lb sp,64(s2) + f0: 0100 addi s0,sp,128 + f2: 04090403 lb s0,64(s2) + f6: 0100 addi s0,sp,128 + f8: 04090103 lb sp,64(s2) + fc: 0100 addi s0,sp,128 + fe: 04090103 lb sp,64(s2) + 102: 0100 addi s0,sp,128 + 104: 04090103 lb sp,64(s2) + 108: 0100 addi s0,sp,128 + 10a: 04090103 lb sp,64(s2) + 10e: 0100 addi s0,sp,128 + 110: 04090103 lb sp,64(s2) + 114: 0100 addi s0,sp,128 + 116: 04090203 lb tp,64(s2) + 11a: 0100 addi s0,sp,128 + 11c: 04090103 lb sp,64(s2) + 120: 0100 addi s0,sp,128 + 122: 04090103 lb sp,64(s2) + 126: 0100 addi s0,sp,128 + 128: 04090103 lb sp,64(s2) + 12c: 0100 addi s0,sp,128 + 12e: 04090203 lb tp,64(s2) + 132: 0100 addi s0,sp,128 + 134: 04090203 lb tp,64(s2) + 138: 0100 addi s0,sp,128 + 13a: 04090103 lb sp,64(s2) + 13e: 0100 addi s0,sp,128 + 140: 04090103 lb sp,64(s2) + 144: 0100 addi s0,sp,128 + 146: 04090203 lb tp,64(s2) + 14a: 0100 addi s0,sp,128 + 14c: 04090103 lb sp,64(s2) + 150: 0100 addi s0,sp,128 + 152: 04090103 lb sp,64(s2) + 156: 0100 addi s0,sp,128 + 158: 04090203 lb tp,64(s2) + 15c: 0100 addi s0,sp,128 + 15e: 04090503 lb a0,64(s2) + 162: 0100 addi s0,sp,128 + 164: 04090103 lb sp,64(s2) + 168: 0100 addi s0,sp,128 + 16a: 04090103 lb sp,64(s2) + 16e: 0100 addi s0,sp,128 + 170: 04090103 lb sp,64(s2) + 174: 0100 addi s0,sp,128 + 176: 04090503 lb a0,64(s2) + 17a: 0100 addi s0,sp,128 + 17c: 04090103 lb sp,64(s2) + 180: 0100 addi s0,sp,128 + 182: 04090103 lb sp,64(s2) + 186: 0100 addi s0,sp,128 + 188: 04090103 lb sp,64(s2) + 18c: 0100 addi s0,sp,128 + 18e: 04090203 lb tp,64(s2) + 192: 0100 addi s0,sp,128 + 194: 04090203 lb tp,64(s2) + 198: 0100 addi s0,sp,128 + 19a: 04090103 lb sp,64(s2) + 19e: 0100 addi s0,sp,128 + 1a0: 04090103 lb sp,64(s2) + 1a4: 0100 addi s0,sp,128 + 1a6: 04090103 lb sp,64(s2) + 1aa: 0100 addi s0,sp,128 + 1ac: 04090403 lb s0,64(s2) + 1b0: 0100 addi s0,sp,128 + 1b2: 04090103 lb sp,64(s2) + 1b6: 0100 addi s0,sp,128 + 1b8: 04090103 lb sp,64(s2) + 1bc: 0100 addi s0,sp,128 + 1be: 04090203 lb tp,64(s2) + 1c2: 0100 addi s0,sp,128 + 1c4: 04090103 lb sp,64(s2) + 1c8: 0100 addi s0,sp,128 + 1ca: 04090103 lb sp,64(s2) + 1ce: 0100 addi s0,sp,128 + 1d0: 04090203 lb tp,64(s2) + 1d4: 0100 addi s0,sp,128 + 1d6: 04090103 lb sp,64(s2) + 1da: 0100 addi s0,sp,128 + 1dc: 04090203 lb tp,64(s2) + 1e0: 0100 addi s0,sp,128 + 1e2: 04090103 lb sp,64(s2) + 1e6: 0100 addi s0,sp,128 + 1e8: 04090103 lb sp,64(s2) + 1ec: 0100 addi s0,sp,128 + 1ee: 04090103 lb sp,64(s2) + 1f2: 0100 addi s0,sp,128 + 1f4: 0409 addi s0,s0,2 + 1f6: 0000 unimp + 1f8: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 15f8 addi a4,sp,748 + 12: 0000 unimp + 14: 161c addi a5,sp,800 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0032 c.slli zero,0xc + 1e: 0000 unimp + 20: 0000008b 0x8b + 24: 8001 c.srli64 s0 + 26: 0022 c.slli zero,0x8 + 28: 0000 unimp + 2a: 0002 c.slli64 zero + 2c: 0014 0x14 + 2e: 0000 unimp + 30: 0104 addi s1,sp,128 + 32: 0092 slli ra,ra,0x4 + 34: 0000 unimp + 36: 161c addi a5,sp,800 + 38: 0000 unimp + 3a: 16d0 addi a2,sp,868 + 3c: 0000 unimp + 3e: 0099 addi ra,ra,6 + 40: 0000 unimp + 42: 0032 c.slli zero,0xc + 44: 0000 unimp + 46: 0000008b 0x8b + 4a: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + 12: 0000 unimp + 14: 1101 addi sp,sp,-32 + 16: 1000 addi s0,sp,32 + 18: 1106 slli sp,sp,0x21 + 1a: 1201 addi tp,tp,-32 + 1c: 0301 addi t1,t1,0 + 1e: 1b0e slli s6,s6,0x23 + 20: 250e fld fa0,192(sp) + 22: 130e slli t1,t1,0x23 + 24: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 15f8 addi a4,sp,748 + 12: 0000 unimp + 14: 0024 addi s1,sp,8 + ... + 1e: 0000 unimp + 20: 001c 0x1c + 22: 0000 unimp + 24: 0002 c.slli64 zero + 26: 0026 c.slli zero,0x9 + 28: 0000 unimp + 2a: 0004 0x4 + 2c: 0000 unimp + 2e: 0000 unimp + 30: 161c addi a5,sp,800 + 32: 0000 unimp + 34: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 6d2f7663 bgeu t5,s2,6f2 + 2a: 6c75 lui s8,0x1d + 2c: 6964 flw fs1,84(a0) + 2e: 00532e33 slt t3,t1,t0 + 32: 6d6f682f 0x6d6f682f + 36: 2f65 jal 7ee + 38: 712d7577 0x712d7577 + 3c: 6e69 lui t3,0x1a + 3e: 35312d67 0x35312d67 + 42: 69722f37 lui t5,0x69722 + 46: 2d766373 csrrsi t1,0x2d7,12 + 4a: 2d756e67 0x2d756e67 + 4e: 6f74 flw fa3,92(a4) + 50: 68636c6f jal s8,366d6 <__heap_start+0x346d6> + 54: 6961 lui s2,0x18 + 56: 2f6e fld ft10,216(sp) + 58: 7562 flw fa0,56(sp) + 5a: 6c69 lui s8,0x1a + 5c: 2d64 fld fs1,216(a0) + 5e: 2d636367 0x2d636367 + 62: 656e flw fa0,216(sp) + 64: 62696c77 0x62696c77 + 68: 732d lui t1,0xfffeb + 6a: 6174 flw fa3,68(a0) + 6c: 2f326567 0x2f326567 + 70: 6972 flw fs2,28(sp) + 72: 33766373 csrrsi t1,mhpmevent23,12 + 76: 2d32 fld fs10,264(sp) + 78: 6e75 lui t3,0x1d + 7a: 776f6e6b 0x776f6e6b + 7e: 2d6e fld fs10,216(sp) + 80: 6c65 lui s8,0x19 + 82: 2f66 fld ft10,88(sp) + 84: 696c flw fa1,84(a0) + 86: 6762 flw fa4,24(sp) + 88: 47006363 bltu zero,a6,4ee + 8c: 554e lw a0,240(sp) + 8e: 4120 lw s0,64(a0) + 90: 2e322053 0x2e322053 + 94: 312e3133 0x312e3133 + 98: 2e00 fld fs0,24(a2) + 9a: 2f2e fld ft10,200(sp) + 9c: 2e2e fld ft8,200(sp) + 9e: 2f2e2e2f 0x2f2e2e2f + a2: 2f2e fld ft10,200(sp) + a4: 6972 flw fs2,28(sp) + a6: 2d766373 csrrsi t1,0x2d7,12 + aa: 2f636367 0x2f636367 + ae: 696c flw fa1,84(a0) + b0: 6762 flw fa4,24(sp) + b2: 632f6363 bltu t5,s2,6d8 + b6: 69666e6f jal t3,6674c <__heap_start+0x6474c> + ba: 69722f67 0x69722f67 + be: 2f766373 csrrsi t1,0x2f7,12 + c2: 6964 flw fs1,84(a0) + c4: 2e76 fld ft8,344(sp) + c6: fadd.s ft0,ft0,ft0,rne diff --git a/test/testcases/expr.c b/test/testcases/expr.c new file mode 100644 index 0000000..cef9878 --- /dev/null +++ b/test/testcases/expr.c @@ -0,0 +1,117 @@ +#include "io.inc" +// This file use massive recursive expression to test: Common Expression +// substitution. For my optimized version: All: 1397 Load: +// 86 Store: 55 Jumped: 23 For my unoptimized version: All: 24519 +// Load: 12183 Store: 55 Jumped: 23 A better result is welcomed. ------ +// From JinTianxing. + +int A = 1; +int B = 1; +int C = 1; + +int main() { + while (C < (1 << 29) && C > -(1 << 29)) { + A = ((((((((C - A + B) - (A + B)) + ((C - A + B) - (A + B))) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))) - + (((((A + B) + (C - A + B)) - ((A + B) + (C - A + B))) - + (((A + B) + (C - A + B)) - (A + B))) + + ((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B))))) + + ((((((C - A + B) - (A + B)) + ((C - A + B) - (A + B))) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))) - + (((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))))) - + (((((((A + B) + (C - A + B)) - ((A + B) + (C - A + B))) - + (((A + B) + (C - A + B)) - (A + B))) + + ((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B)))) + + (((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B))) + + ((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B))))) + + ((((((C - A + B) - (A + B)) + ((C - A + B) - (A + B))) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))) - + (((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B))))))); + B = ((((((((C - A + B) - (A + B)) + ((C - A + B) - (A + B))) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))) - + (((((A + B) + (C - A + B)) - ((A + B) + (C - A + B))) - + (((A + B) + (C - A + B)) - (A + B))) + + ((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B))))) + + ((((((C - A + B) - (A + B)) + ((C - A + B) - (A + B))) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))) - + (((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))))) - + (((((((A + B) + (C - A + B)) - ((A + B) + (C - A + B))) - + (((A + B) + (C - A + B)) - (A + B))) + + ((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B)))) + + (((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B))) + + ((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B))))) + + ((((((C - A + B) - (A + B)) + ((C - A + B) - (A + B))) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))) - + (((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B))))))); + C = ((((((((C - A + B) - (A + B)) + ((C - A + B) - (A + B))) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))) - + (((((A + B) + (C - A + B)) - ((A + B) + (C - A + B))) - + (((A + B) + (C - A + B)) - (A + B))) + + ((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B))))) + + ((((((C - A + B) - (A + B)) + ((C - A + B) - (A + B))) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))) - + (((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))))) - + (((((((A + B) + (C - A + B)) - ((A + B) + (C - A + B))) - + (((A + B) + (C - A + B)) - (A + B))) + + ((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B)))) + + (((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B))) + + ((((C - A + B) - (A + B)) + (C - A + B)) - + (((A + B) + (C - A + B)) - (A + B))))) + + ((((((C - A + B) - (A + B)) + ((C - A + B) - (A + B))) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B)))) - + (((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B))) - + ((((A + B) + (C - A + B)) - (A + B)) + + (((C - A + B) - (A + B)) + (C - A + B))))))); + } + printInt(A); + // print(" "); + printInt(B); + // print(" "); + printInt(C); + return judgeResult % Mod; // 58 +} diff --git a/test/testcases/expr.data b/test/testcases/expr.data new file mode 100644 index 0000000..f615cb8 --- /dev/null +++ b/test/testcases/expr.data @@ -0,0 +1,37 @@ +@00000000 +37 01 02 00 EF 10 00 04 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 07 1E 33 45 F5 00 13 05 D5 0A +23 20 A7 1E 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 07 1E B3 C7 D7 00 93 87 97 20 +23 20 F7 1E 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FF 23 26 11 00 B7 17 00 00 +83 A7 47 1D 37 07 00 20 13 07 F7 FF 33 87 E7 00 +B7 06 00 40 93 86 E6 FF 63 EA E6 06 37 17 00 00 +03 27 C7 1D B7 16 00 00 83 A6 86 1D 37 05 00 20 +13 05 F5 FF B7 05 00 40 93 85 E5 FF 33 86 E7 40 +33 07 E6 40 33 06 D6 00 13 17 17 00 33 07 E6 40 +B3 87 E7 40 33 86 E7 40 13 16 16 00 B3 86 D7 00 +B3 86 C6 40 B3 87 D7 00 B3 87 C7 40 33 86 A7 00 +E3 F6 C5 FC 37 16 00 00 23 2E E6 1C 37 17 00 00 +23 2C D7 1C 37 17 00 00 23 2A F7 1C B7 17 00 00 +03 A5 C7 1D EF F0 DF F1 B7 17 00 00 03 A5 87 1D +EF F0 1F F1 B7 17 00 00 03 A5 47 1D EF F0 5F F0 +93 05 D0 0F B7 17 00 00 03 A5 07 1E EF 00 40 09 +83 20 C1 00 13 01 01 01 67 80 00 00 63 40 05 06 +63 C6 05 06 13 86 05 00 93 05 05 00 13 05 F0 FF +63 0C 06 02 93 06 10 00 63 7A B6 00 63 58 C0 00 +13 16 16 00 93 96 16 00 E3 6A B6 FE 13 05 00 00 +63 E6 C5 00 B3 85 C5 40 33 65 D5 00 93 D6 16 00 +13 56 16 00 E3 96 06 FE 67 80 00 00 93 82 00 00 +EF F0 5F FB 13 85 05 00 67 80 02 00 33 05 A0 40 +63 D8 05 00 B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 +93 82 00 00 EF F0 1F F9 33 05 A0 40 67 80 02 00 +93 82 00 00 63 CA 05 00 63 4C 05 00 EF F0 9F F7 +13 85 05 00 67 80 02 00 B3 05 B0 40 E3 58 05 FE +33 05 A0 40 EF F0 1F F6 33 05 B0 40 67 80 02 00 +@000011D0 +FD 00 00 00 +@000011D4 +01 00 00 00 01 00 00 00 01 00 00 00 diff --git a/test/testcases/expr.dump b/test/testcases/expr.dump new file mode 100644 index 0000000..5d61a8d --- /dev/null +++ b/test/testcases/expr.dump @@ -0,0 +1,423 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 040010ef jal ra,1044
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 1e072783 lw a5,480(a4) # 11e0 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 1ea72023 sw a0,480(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 1e072683 lw a3,480(a4) # 11e0 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 1ef72023 sw a5,480(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044
: + 1044: ff010113 addi sp,sp,-16 # 1fff0 <__heap_start+0x1dff0> + 1048: 00112623 sw ra,12(sp) + 104c: 000017b7 lui a5,0x1 + 1050: 1d47a783 lw a5,468(a5) # 11d4 <__bss_start> + 1054: 20000737 lui a4,0x20000 + 1058: fff70713 addi a4,a4,-1 # 1fffffff <__heap_start+0x1fffdfff> + 105c: 00e78733 add a4,a5,a4 + 1060: 400006b7 lui a3,0x40000 + 1064: ffe68693 addi a3,a3,-2 # 3ffffffe <__heap_start+0x3fffdffe> + 1068: 06e6ea63 bltu a3,a4,10dc + 106c: 00001737 lui a4,0x1 + 1070: 1dc72703 lw a4,476(a4) # 11dc + 1074: 000016b7 lui a3,0x1 + 1078: 1d86a683 lw a3,472(a3) # 11d8 + 107c: 20000537 lui a0,0x20000 + 1080: fff50513 addi a0,a0,-1 # 1fffffff <__heap_start+0x1fffdfff> + 1084: 400005b7 lui a1,0x40000 + 1088: ffe58593 addi a1,a1,-2 # 3ffffffe <__heap_start+0x3fffdffe> + 108c: 40e78633 sub a2,a5,a4 + 1090: 40e60733 sub a4,a2,a4 + 1094: 00d60633 add a2,a2,a3 + 1098: 00171713 slli a4,a4,0x1 + 109c: 40e60733 sub a4,a2,a4 + 10a0: 40e787b3 sub a5,a5,a4 + 10a4: 40e78633 sub a2,a5,a4 + 10a8: 00161613 slli a2,a2,0x1 + 10ac: 00d786b3 add a3,a5,a3 + 10b0: 40c686b3 sub a3,a3,a2 + 10b4: 00d787b3 add a5,a5,a3 + 10b8: 40c787b3 sub a5,a5,a2 + 10bc: 00a78633 add a2,a5,a0 + 10c0: fcc5f6e3 bgeu a1,a2,108c + 10c4: 00001637 lui a2,0x1 + 10c8: 1ce62e23 sw a4,476(a2) # 11dc + 10cc: 00001737 lui a4,0x1 + 10d0: 1cd72c23 sw a3,472(a4) # 11d8 + 10d4: 00001737 lui a4,0x1 + 10d8: 1cf72a23 sw a5,468(a4) # 11d4 <__bss_start> + 10dc: 000017b7 lui a5,0x1 + 10e0: 1dc7a503 lw a0,476(a5) # 11dc + 10e4: f1dff0ef jal ra,1000 + 10e8: 000017b7 lui a5,0x1 + 10ec: 1d87a503 lw a0,472(a5) # 11d8 + 10f0: f11ff0ef jal ra,1000 + 10f4: 000017b7 lui a5,0x1 + 10f8: 1d47a503 lw a0,468(a5) # 11d4 <__bss_start> + 10fc: f05ff0ef jal ra,1000 + 1100: 0fd00593 li a1,253 + 1104: 000017b7 lui a5,0x1 + 1108: 1e07a503 lw a0,480(a5) # 11e0 <__bss_end> + 110c: 094000ef jal ra,11a0 <__modsi3> + 1110: 00c12083 lw ra,12(sp) + 1114: 01010113 addi sp,sp,16 + 1118: 00008067 ret + +0000111c <__divsi3>: + 111c: 06054063 bltz a0,117c <__umodsi3+0x10> + 1120: 0605c663 bltz a1,118c <__umodsi3+0x20> + +00001124 <__udivsi3>: + 1124: 00058613 mv a2,a1 + 1128: 00050593 mv a1,a0 + 112c: fff00513 li a0,-1 + 1130: 02060c63 beqz a2,1168 <__udivsi3+0x44> + 1134: 00100693 li a3,1 + 1138: 00b67a63 bgeu a2,a1,114c <__udivsi3+0x28> + 113c: 00c05863 blez a2,114c <__udivsi3+0x28> + 1140: 00161613 slli a2,a2,0x1 + 1144: 00169693 slli a3,a3,0x1 + 1148: feb66ae3 bltu a2,a1,113c <__udivsi3+0x18> + 114c: 00000513 li a0,0 + 1150: 00c5e663 bltu a1,a2,115c <__udivsi3+0x38> + 1154: 40c585b3 sub a1,a1,a2 + 1158: 00d56533 or a0,a0,a3 + 115c: 0016d693 srli a3,a3,0x1 + 1160: 00165613 srli a2,a2,0x1 + 1164: fe0696e3 bnez a3,1150 <__udivsi3+0x2c> + 1168: 00008067 ret + +0000116c <__umodsi3>: + 116c: 00008293 mv t0,ra + 1170: fb5ff0ef jal ra,1124 <__udivsi3> + 1174: 00058513 mv a0,a1 + 1178: 00028067 jr t0 + 117c: 40a00533 neg a0,a0 + 1180: 0005d863 bgez a1,1190 <__umodsi3+0x24> + 1184: 40b005b3 neg a1,a1 + 1188: f9dff06f j 1124 <__udivsi3> + 118c: 40b005b3 neg a1,a1 + 1190: 00008293 mv t0,ra + 1194: f91ff0ef jal ra,1124 <__udivsi3> + 1198: 40a00533 neg a0,a0 + 119c: 00028067 jr t0 + +000011a0 <__modsi3>: + 11a0: 00008293 mv t0,ra + 11a4: 0005ca63 bltz a1,11b8 <__modsi3+0x18> + 11a8: 00054c63 bltz a0,11c0 <__modsi3+0x20> + 11ac: f79ff0ef jal ra,1124 <__udivsi3> + 11b0: 00058513 mv a0,a1 + 11b4: 00028067 jr t0 + 11b8: 40b005b3 neg a1,a1 + 11bc: fe0558e3 bgez a0,11ac <__modsi3+0xc> + 11c0: 40a00533 neg a0,a0 + 11c4: f61ff0ef jal ra,1124 <__udivsi3> + 11c8: 40b00533 neg a0,a1 + 11cc: 00028067 jr t0 + +Disassembly of section .srodata: + +000011d0 : + 11d0: 00fd addi ra,ra,31 + ... + +Disassembly of section .sdata: + +000011d4 : + 11d4: 0001 nop + ... + +000011d8 : + 11d8: 0001 nop + ... + +000011dc : + 11dc: 0001 nop + ... + +Disassembly of section .sbss: + +000011e0 : + 11e0: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 111c addi a5,sp,160 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 111c addi a5,sp,160 + 12: 0000 unimp + 14: 11d0 addi a2,sp,228 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 111c addi a5,sp,160 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/gcd.c b/test/testcases/gcd.c new file mode 100644 index 0000000..4f3ff43 --- /dev/null +++ b/test/testcases/gcd.c @@ -0,0 +1,15 @@ +#include "io.inc" + +int gcd(int x, int y) { + if (x % y == 0) + return y; + else + return gcd(y, x % y); +} + +int main() { + printInt(gcd(10, 1)); + printInt(gcd(34986, 3087)); + printInt(gcd(2907, 1539)); + return judgeResult % Mod; // 178 +} \ No newline at end of file diff --git a/test/testcases/gcd.data b/test/testcases/gcd.data new file mode 100644 index 0000000..cc1433f --- /dev/null +++ b/test/testcases/gcd.data @@ -0,0 +1,32 @@ +@00000000 +37 01 02 00 EF 10 00 08 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 07 1A 33 45 F5 00 13 05 D5 0A +23 20 A7 1A 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 07 1A B3 C7 D7 00 93 87 97 20 +23 20 F7 1A 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FF 23 26 11 00 23 24 81 00 +13 84 05 00 EF 00 80 11 63 1C 05 00 13 05 04 00 +83 20 C1 00 03 24 81 00 13 01 01 01 67 80 00 00 +93 05 05 00 13 05 04 00 EF F0 DF FC 13 04 05 00 +6F F0 DF FD 13 01 01 FF 23 26 11 00 23 24 81 00 +93 05 10 00 13 05 A0 00 EF F0 DF FA EF F0 5F F6 +37 14 00 00 93 05 F4 C0 37 95 00 00 13 05 A5 8A +EF F0 5F F9 EF F0 DF F4 93 05 30 60 13 05 B4 B5 +EF F0 5F F8 EF F0 DF F3 93 05 D0 0F B7 17 00 00 +03 A5 07 1A EF 00 80 09 83 20 C1 00 03 24 81 00 +13 01 01 01 67 80 00 00 63 40 05 06 63 C6 05 06 +13 86 05 00 93 05 05 00 13 05 F0 FF 63 0C 06 02 +93 06 10 00 63 7A B6 00 63 58 C0 00 13 16 16 00 +93 96 16 00 E3 6A B6 FE 13 05 00 00 63 E6 C5 00 +B3 85 C5 40 33 65 D5 00 93 D6 16 00 13 56 16 00 +E3 96 06 FE 67 80 00 00 93 82 00 00 EF F0 5F FB +13 85 05 00 67 80 02 00 33 05 A0 40 63 D8 05 00 +B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 93 82 00 00 +EF F0 1F F9 33 05 A0 40 67 80 02 00 93 82 00 00 +63 CA 05 00 63 4C 05 00 EF F0 9F F7 13 85 05 00 +67 80 02 00 B3 05 B0 40 E3 58 05 FE 33 05 A0 40 +EF F0 1F F6 33 05 B0 40 67 80 02 00 +@0000119C +FD 00 00 00 diff --git a/test/testcases/gcd.dump b/test/testcases/gcd.dump new file mode 100644 index 0000000..7e59805 --- /dev/null +++ b/test/testcases/gcd.dump @@ -0,0 +1,398 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 080010ef jal ra,1084
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 1a072783 lw a5,416(a4) # 11a0 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 1aa72023 sw a0,416(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 1a072683 lw a3,416(a4) # 11a0 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 1af72023 sw a5,416(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044 : + 1044: ff010113 addi sp,sp,-16 # 1fff0 <__heap_start+0x1dff0> + 1048: 00112623 sw ra,12(sp) + 104c: 00812423 sw s0,8(sp) + 1050: 00058413 mv s0,a1 + 1054: 118000ef jal ra,116c <__modsi3> + 1058: 00051c63 bnez a0,1070 + 105c: 00040513 mv a0,s0 + 1060: 00c12083 lw ra,12(sp) + 1064: 00812403 lw s0,8(sp) + 1068: 01010113 addi sp,sp,16 + 106c: 00008067 ret + 1070: 00050593 mv a1,a0 + 1074: 00040513 mv a0,s0 + 1078: fcdff0ef jal ra,1044 + 107c: 00050413 mv s0,a0 + 1080: fddff06f j 105c + +00001084
: + 1084: ff010113 addi sp,sp,-16 + 1088: 00112623 sw ra,12(sp) + 108c: 00812423 sw s0,8(sp) + 1090: 00100593 li a1,1 + 1094: 00a00513 li a0,10 + 1098: fadff0ef jal ra,1044 + 109c: f65ff0ef jal ra,1000 + 10a0: 00001437 lui s0,0x1 + 10a4: c0f40593 addi a1,s0,-1009 # c0f + 10a8: 00009537 lui a0,0x9 + 10ac: 8aa50513 addi a0,a0,-1878 # 88aa <__heap_start+0x68aa> + 10b0: f95ff0ef jal ra,1044 + 10b4: f4dff0ef jal ra,1000 + 10b8: 60300593 li a1,1539 + 10bc: b5b40513 addi a0,s0,-1189 + 10c0: f85ff0ef jal ra,1044 + 10c4: f3dff0ef jal ra,1000 + 10c8: 0fd00593 li a1,253 + 10cc: 000017b7 lui a5,0x1 + 10d0: 1a07a503 lw a0,416(a5) # 11a0 <__bss_end> + 10d4: 098000ef jal ra,116c <__modsi3> + 10d8: 00c12083 lw ra,12(sp) + 10dc: 00812403 lw s0,8(sp) + 10e0: 01010113 addi sp,sp,16 + 10e4: 00008067 ret + +000010e8 <__divsi3>: + 10e8: 06054063 bltz a0,1148 <__umodsi3+0x10> + 10ec: 0605c663 bltz a1,1158 <__umodsi3+0x20> + +000010f0 <__udivsi3>: + 10f0: 00058613 mv a2,a1 + 10f4: 00050593 mv a1,a0 + 10f8: fff00513 li a0,-1 + 10fc: 02060c63 beqz a2,1134 <__udivsi3+0x44> + 1100: 00100693 li a3,1 + 1104: 00b67a63 bgeu a2,a1,1118 <__udivsi3+0x28> + 1108: 00c05863 blez a2,1118 <__udivsi3+0x28> + 110c: 00161613 slli a2,a2,0x1 + 1110: 00169693 slli a3,a3,0x1 + 1114: feb66ae3 bltu a2,a1,1108 <__udivsi3+0x18> + 1118: 00000513 li a0,0 + 111c: 00c5e663 bltu a1,a2,1128 <__udivsi3+0x38> + 1120: 40c585b3 sub a1,a1,a2 + 1124: 00d56533 or a0,a0,a3 + 1128: 0016d693 srli a3,a3,0x1 + 112c: 00165613 srli a2,a2,0x1 + 1130: fe0696e3 bnez a3,111c <__udivsi3+0x2c> + 1134: 00008067 ret + +00001138 <__umodsi3>: + 1138: 00008293 mv t0,ra + 113c: fb5ff0ef jal ra,10f0 <__udivsi3> + 1140: 00058513 mv a0,a1 + 1144: 00028067 jr t0 + 1148: 40a00533 neg a0,a0 + 114c: 0005d863 bgez a1,115c <__umodsi3+0x24> + 1150: 40b005b3 neg a1,a1 + 1154: f9dff06f j 10f0 <__udivsi3> + 1158: 40b005b3 neg a1,a1 + 115c: 00008293 mv t0,ra + 1160: f91ff0ef jal ra,10f0 <__udivsi3> + 1164: 40a00533 neg a0,a0 + 1168: 00028067 jr t0 + +0000116c <__modsi3>: + 116c: 00008293 mv t0,ra + 1170: 0005ca63 bltz a1,1184 <__modsi3+0x18> + 1174: 00054c63 bltz a0,118c <__modsi3+0x20> + 1178: f79ff0ef jal ra,10f0 <__udivsi3> + 117c: 00058513 mv a0,a1 + 1180: 00028067 jr t0 + 1184: 40b005b3 neg a1,a1 + 1188: fe0558e3 bgez a0,1178 <__modsi3+0xc> + 118c: 40a00533 neg a0,a0 + 1190: f61ff0ef jal ra,10f0 <__udivsi3> + 1194: 40b00533 neg a0,a1 + 1198: 00028067 jr t0 + +Disassembly of section .srodata: + +0000119c : + 119c: 00fd addi ra,ra,31 + ... + +Disassembly of section .sbss: + +000011a0 : + 11a0: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 10e8 addi a0,sp,108 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 10e8 addi a0,sp,108 + 12: 0000 unimp + 14: 119c addi a5,sp,224 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 10e8 addi a0,sp,108 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/hanoi.c b/test/testcases/hanoi.c new file mode 100644 index 0000000..f383b11 --- /dev/null +++ b/test/testcases/hanoi.c @@ -0,0 +1,30 @@ +#include "io.inc" + +int cd(int d, char *a, char *b, char *c, int sum) { + if (d == 1) { + printStr("move "); + printStr(a); + printStr(" --> "); + printStr(c); + sum++; + } else { + sum = cd(d - 1, a, c, b, sum); + printStr("move "); + printStr(a); + printStr(" --> "); + printStr(c); + sum = cd(d - 1, b, a, c, sum); + sum++; + } + return sum; +} + +int main() { + char a[5] = "A"; + char b[5] = "B"; + char c[5] = "C"; + int d = 10; + int sum = cd(d, a, b, c, 0); + printInt(sum); + return judgeResult % Mod; // 20 +} diff --git a/test/testcases/hanoi.data b/test/testcases/hanoi.data new file mode 100644 index 0000000..2849aca --- /dev/null +++ b/test/testcases/hanoi.data @@ -0,0 +1,44 @@ +@00000000 +37 01 02 00 EF 10 00 12 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 07 25 33 45 F5 00 13 05 D5 0A +23 28 A7 24 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 07 25 B3 C7 D7 00 93 87 97 20 +23 28 F7 24 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FE 23 2E 11 00 23 2C 81 00 +23 2A 91 00 23 28 21 01 23 26 31 01 23 24 41 01 +13 89 05 00 93 89 06 00 93 04 07 00 93 07 10 00 +63 02 F5 08 13 0A 06 00 13 04 F5 FF 93 06 06 00 +13 86 09 00 13 05 04 00 EF F0 DF FB 93 04 05 00 +37 15 00 00 13 05 C5 23 EF F0 1F F8 13 05 09 00 +EF F0 9F F7 37 15 00 00 13 05 45 24 EF F0 DF F6 +13 85 09 00 EF F0 5F F6 13 87 04 00 93 86 09 00 +13 06 09 00 93 05 0A 00 13 05 04 00 EF F0 9F F7 +13 05 15 00 83 20 C1 01 03 24 81 01 83 24 41 01 +03 29 01 01 83 29 C1 00 03 2A 81 00 13 01 01 02 +67 80 00 00 37 15 00 00 13 05 C5 23 EF F0 DF F1 +13 05 09 00 EF F0 5F F1 37 15 00 00 13 05 45 24 +EF F0 9F F0 13 85 09 00 EF F0 1F F0 13 85 14 00 +6F F0 5F FB 13 01 01 FD 23 26 11 02 93 07 10 04 +23 2C F1 00 23 0E 01 00 93 07 20 04 23 28 F1 00 +23 0A 01 00 93 07 30 04 23 24 F1 00 23 06 01 00 +13 07 00 00 93 06 81 00 13 06 01 01 93 05 81 01 +13 05 A0 00 EF F0 1F EE EF F0 9F E9 93 05 D0 0F +B7 17 00 00 03 A5 07 25 EF 00 40 09 83 20 C1 02 +13 01 01 03 67 80 00 00 63 40 05 06 63 C6 05 06 +13 86 05 00 93 05 05 00 13 05 F0 FF 63 0C 06 02 +93 06 10 00 63 7A B6 00 63 58 C0 00 13 16 16 00 +93 96 16 00 E3 6A B6 FE 13 05 00 00 63 E6 C5 00 +B3 85 C5 40 33 65 D5 00 93 D6 16 00 13 56 16 00 +E3 96 06 FE 67 80 00 00 93 82 00 00 EF F0 5F FB +13 85 05 00 67 80 02 00 33 05 A0 40 63 D8 05 00 +B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 93 82 00 00 +EF F0 1F F9 33 05 A0 40 67 80 02 00 93 82 00 00 +63 CA 05 00 63 4C 05 00 EF F0 9F F7 13 85 05 00 +67 80 02 00 B3 05 B0 40 E3 58 05 FE 33 05 A0 40 +EF F0 1F F6 33 05 B0 40 67 80 02 00 +@0000123C +6D 6F 76 65 20 00 00 00 20 2D 2D 3E 20 00 00 00 +@0000124C +FD 00 00 00 diff --git a/test/testcases/hanoi.dump b/test/testcases/hanoi.dump new file mode 100644 index 0000000..81ebaf5 --- /dev/null +++ b/test/testcases/hanoi.dump @@ -0,0 +1,450 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 120010ef jal ra,1124
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 25072783 lw a5,592(a4) # 1250 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 24a72823 sw a0,592(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 25072683 lw a3,592(a4) # 1250 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 24f72823 sw a5,592(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044 : + 1044: fe010113 addi sp,sp,-32 # 1ffe0 <__heap_start+0x1dfe0> + 1048: 00112e23 sw ra,28(sp) + 104c: 00812c23 sw s0,24(sp) + 1050: 00912a23 sw s1,20(sp) + 1054: 01212823 sw s2,16(sp) + 1058: 01312623 sw s3,12(sp) + 105c: 01412423 sw s4,8(sp) + 1060: 00058913 mv s2,a1 + 1064: 00068993 mv s3,a3 + 1068: 00070493 mv s1,a4 + 106c: 00100793 li a5,1 + 1070: 08f50263 beq a0,a5,10f4 + 1074: 00060a13 mv s4,a2 + 1078: fff50413 addi s0,a0,-1 + 107c: 00060693 mv a3,a2 + 1080: 00098613 mv a2,s3 + 1084: 00040513 mv a0,s0 + 1088: fbdff0ef jal ra,1044 + 108c: 00050493 mv s1,a0 + 1090: 00001537 lui a0,0x1 + 1094: 23c50513 addi a0,a0,572 # 123c <__modsi3+0x30> + 1098: f81ff0ef jal ra,1018 + 109c: 00090513 mv a0,s2 + 10a0: f79ff0ef jal ra,1018 + 10a4: 00001537 lui a0,0x1 + 10a8: 24450513 addi a0,a0,580 # 1244 <__modsi3+0x38> + 10ac: f6dff0ef jal ra,1018 + 10b0: 00098513 mv a0,s3 + 10b4: f65ff0ef jal ra,1018 + 10b8: 00048713 mv a4,s1 + 10bc: 00098693 mv a3,s3 + 10c0: 00090613 mv a2,s2 + 10c4: 000a0593 mv a1,s4 + 10c8: 00040513 mv a0,s0 + 10cc: f79ff0ef jal ra,1044 + 10d0: 00150513 addi a0,a0,1 + 10d4: 01c12083 lw ra,28(sp) + 10d8: 01812403 lw s0,24(sp) + 10dc: 01412483 lw s1,20(sp) + 10e0: 01012903 lw s2,16(sp) + 10e4: 00c12983 lw s3,12(sp) + 10e8: 00812a03 lw s4,8(sp) + 10ec: 02010113 addi sp,sp,32 + 10f0: 00008067 ret + 10f4: 00001537 lui a0,0x1 + 10f8: 23c50513 addi a0,a0,572 # 123c <__modsi3+0x30> + 10fc: f1dff0ef jal ra,1018 + 1100: 00090513 mv a0,s2 + 1104: f15ff0ef jal ra,1018 + 1108: 00001537 lui a0,0x1 + 110c: 24450513 addi a0,a0,580 # 1244 <__modsi3+0x38> + 1110: f09ff0ef jal ra,1018 + 1114: 00098513 mv a0,s3 + 1118: f01ff0ef jal ra,1018 + 111c: 00148513 addi a0,s1,1 + 1120: fb5ff06f j 10d4 + +00001124
: + 1124: fd010113 addi sp,sp,-48 + 1128: 02112623 sw ra,44(sp) + 112c: 04100793 li a5,65 + 1130: 00f12c23 sw a5,24(sp) + 1134: 00010e23 sb zero,28(sp) + 1138: 04200793 li a5,66 + 113c: 00f12823 sw a5,16(sp) + 1140: 00010a23 sb zero,20(sp) + 1144: 04300793 li a5,67 + 1148: 00f12423 sw a5,8(sp) + 114c: 00010623 sb zero,12(sp) + 1150: 00000713 li a4,0 + 1154: 00810693 addi a3,sp,8 + 1158: 01010613 addi a2,sp,16 + 115c: 01810593 addi a1,sp,24 + 1160: 00a00513 li a0,10 + 1164: ee1ff0ef jal ra,1044 + 1168: e99ff0ef jal ra,1000 + 116c: 0fd00593 li a1,253 + 1170: 000017b7 lui a5,0x1 + 1174: 2507a503 lw a0,592(a5) # 1250 <__bss_end> + 1178: 094000ef jal ra,120c <__modsi3> + 117c: 02c12083 lw ra,44(sp) + 1180: 03010113 addi sp,sp,48 + 1184: 00008067 ret + +00001188 <__divsi3>: + 1188: 06054063 bltz a0,11e8 <__umodsi3+0x10> + 118c: 0605c663 bltz a1,11f8 <__umodsi3+0x20> + +00001190 <__udivsi3>: + 1190: 00058613 mv a2,a1 + 1194: 00050593 mv a1,a0 + 1198: fff00513 li a0,-1 + 119c: 02060c63 beqz a2,11d4 <__udivsi3+0x44> + 11a0: 00100693 li a3,1 + 11a4: 00b67a63 bgeu a2,a1,11b8 <__udivsi3+0x28> + 11a8: 00c05863 blez a2,11b8 <__udivsi3+0x28> + 11ac: 00161613 slli a2,a2,0x1 + 11b0: 00169693 slli a3,a3,0x1 + 11b4: feb66ae3 bltu a2,a1,11a8 <__udivsi3+0x18> + 11b8: 00000513 li a0,0 + 11bc: 00c5e663 bltu a1,a2,11c8 <__udivsi3+0x38> + 11c0: 40c585b3 sub a1,a1,a2 + 11c4: 00d56533 or a0,a0,a3 + 11c8: 0016d693 srli a3,a3,0x1 + 11cc: 00165613 srli a2,a2,0x1 + 11d0: fe0696e3 bnez a3,11bc <__udivsi3+0x2c> + 11d4: 00008067 ret + +000011d8 <__umodsi3>: + 11d8: 00008293 mv t0,ra + 11dc: fb5ff0ef jal ra,1190 <__udivsi3> + 11e0: 00058513 mv a0,a1 + 11e4: 00028067 jr t0 + 11e8: 40a00533 neg a0,a0 + 11ec: 0005d863 bgez a1,11fc <__umodsi3+0x24> + 11f0: 40b005b3 neg a1,a1 + 11f4: f9dff06f j 1190 <__udivsi3> + 11f8: 40b005b3 neg a1,a1 + 11fc: 00008293 mv t0,ra + 1200: f91ff0ef jal ra,1190 <__udivsi3> + 1204: 40a00533 neg a0,a0 + 1208: 00028067 jr t0 + +0000120c <__modsi3>: + 120c: 00008293 mv t0,ra + 1210: 0005ca63 bltz a1,1224 <__modsi3+0x18> + 1214: 00054c63 bltz a0,122c <__modsi3+0x20> + 1218: f79ff0ef jal ra,1190 <__udivsi3> + 121c: 00058513 mv a0,a1 + 1220: 00028067 jr t0 + 1224: 40b005b3 neg a1,a1 + 1228: fe0558e3 bgez a0,1218 <__modsi3+0xc> + 122c: 40a00533 neg a0,a0 + 1230: f61ff0ef jal ra,1190 <__udivsi3> + 1234: 40b00533 neg a0,a1 + 1238: 00028067 jr t0 + +Disassembly of section .rodata.str1.4: + +0000123c <.rodata.str1.4>: + 123c: 6f6d lui t5,0x1b + 123e: 6576 flw fa0,92(sp) + 1240: 0020 addi s0,sp,8 + 1242: 0000 unimp + 1244: 2d20 fld fs0,88(a0) + 1246: 3e2d jal d80 + 1248: 0020 addi s0,sp,8 + ... + +Disassembly of section .srodata: + +0000124c : + 124c: 00fd addi ra,ra,31 + ... + +Disassembly of section .sbss: + +00001250 : + 1250: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 1188 addi a0,sp,224 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 1188 addi a0,sp,224 + 12: 0000 unimp + 14: 123c addi a5,sp,296 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 1188 addi a0,sp,224 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/io.inc b/test/testcases/io.inc new file mode 100644 index 0000000..9ebf34a --- /dev/null +++ b/test/testcases/io.inc @@ -0,0 +1,14 @@ +int judgeResult = 0; +const int Mod = 253; + +void printInt(int x) { + judgeResult ^= x; + judgeResult += 173; +} + +void printStr(const char *str) { + for (const char *cur = str; *cur != 0; ++cur) { + judgeResult ^= *cur; + judgeResult += 521; + } +} diff --git a/test/testcases/lvalue2.c b/test/testcases/lvalue2.c new file mode 100644 index 0000000..2af71e6 --- /dev/null +++ b/test/testcases/lvalue2.c @@ -0,0 +1,10 @@ +#include "io.inc" +int a[4]; +int main() { + int b[4]; + b[2] = 2; + int *p; + p = b; + printInt(p[2]); + return judgeResult % Mod; // 175 +} diff --git a/test/testcases/lvalue2.data b/test/testcases/lvalue2.data new file mode 100644 index 0000000..42118bc --- /dev/null +++ b/test/testcases/lvalue2.data @@ -0,0 +1,25 @@ +@00000000 +37 01 02 00 EF 10 00 04 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 87 13 33 45 F5 00 13 05 D5 0A +23 2C A7 12 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 87 13 B3 C7 D7 00 93 87 97 20 +23 2C F7 12 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FF 23 26 11 00 13 05 20 00 +EF F0 1F FB 93 05 D0 0F B7 17 00 00 03 A5 87 13 +EF 00 40 09 83 20 C1 00 13 01 01 01 67 80 00 00 +63 40 05 06 63 C6 05 06 13 86 05 00 93 05 05 00 +13 05 F0 FF 63 0C 06 02 93 06 10 00 63 7A B6 00 +63 58 C0 00 13 16 16 00 93 96 16 00 E3 6A B6 FE +13 05 00 00 63 E6 C5 00 B3 85 C5 40 33 65 D5 00 +93 D6 16 00 13 56 16 00 E3 96 06 FE 67 80 00 00 +93 82 00 00 EF F0 5F FB 13 85 05 00 67 80 02 00 +33 05 A0 40 63 D8 05 00 B3 05 B0 40 6F F0 DF F9 +B3 05 B0 40 93 82 00 00 EF F0 1F F9 33 05 A0 40 +67 80 02 00 93 82 00 00 63 CA 05 00 63 4C 05 00 +EF F0 9F F7 13 85 05 00 67 80 02 00 B3 05 B0 40 +E3 58 05 FE 33 05 A0 40 EF F0 1F F6 33 05 B0 40 +67 80 02 00 +@00001124 +FD 00 00 00 diff --git a/test/testcases/lvalue2.dump b/test/testcases/lvalue2.dump new file mode 100644 index 0000000..4ffb8e6 --- /dev/null +++ b/test/testcases/lvalue2.dump @@ -0,0 +1,371 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 040010ef jal ra,1044
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 13872783 lw a5,312(a4) # 1138 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 12a72c23 sw a0,312(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 13872683 lw a3,312(a4) # 1138 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 12f72c23 sw a5,312(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044
: + 1044: ff010113 addi sp,sp,-16 # 1fff0 <__heap_start+0x1dff0> + 1048: 00112623 sw ra,12(sp) + 104c: 00200513 li a0,2 + 1050: fb1ff0ef jal ra,1000 + 1054: 0fd00593 li a1,253 + 1058: 000017b7 lui a5,0x1 + 105c: 1387a503 lw a0,312(a5) # 1138 <__bss_end> + 1060: 094000ef jal ra,10f4 <__modsi3> + 1064: 00c12083 lw ra,12(sp) + 1068: 01010113 addi sp,sp,16 + 106c: 00008067 ret + +00001070 <__divsi3>: + 1070: 06054063 bltz a0,10d0 <__umodsi3+0x10> + 1074: 0605c663 bltz a1,10e0 <__umodsi3+0x20> + +00001078 <__udivsi3>: + 1078: 00058613 mv a2,a1 + 107c: 00050593 mv a1,a0 + 1080: fff00513 li a0,-1 + 1084: 02060c63 beqz a2,10bc <__udivsi3+0x44> + 1088: 00100693 li a3,1 + 108c: 00b67a63 bgeu a2,a1,10a0 <__udivsi3+0x28> + 1090: 00c05863 blez a2,10a0 <__udivsi3+0x28> + 1094: 00161613 slli a2,a2,0x1 + 1098: 00169693 slli a3,a3,0x1 + 109c: feb66ae3 bltu a2,a1,1090 <__udivsi3+0x18> + 10a0: 00000513 li a0,0 + 10a4: 00c5e663 bltu a1,a2,10b0 <__udivsi3+0x38> + 10a8: 40c585b3 sub a1,a1,a2 + 10ac: 00d56533 or a0,a0,a3 + 10b0: 0016d693 srli a3,a3,0x1 + 10b4: 00165613 srli a2,a2,0x1 + 10b8: fe0696e3 bnez a3,10a4 <__udivsi3+0x2c> + 10bc: 00008067 ret + +000010c0 <__umodsi3>: + 10c0: 00008293 mv t0,ra + 10c4: fb5ff0ef jal ra,1078 <__udivsi3> + 10c8: 00058513 mv a0,a1 + 10cc: 00028067 jr t0 + 10d0: 40a00533 neg a0,a0 + 10d4: 0005d863 bgez a1,10e4 <__umodsi3+0x24> + 10d8: 40b005b3 neg a1,a1 + 10dc: f9dff06f j 1078 <__udivsi3> + 10e0: 40b005b3 neg a1,a1 + 10e4: 00008293 mv t0,ra + 10e8: f91ff0ef jal ra,1078 <__udivsi3> + 10ec: 40a00533 neg a0,a0 + 10f0: 00028067 jr t0 + +000010f4 <__modsi3>: + 10f4: 00008293 mv t0,ra + 10f8: 0005ca63 bltz a1,110c <__modsi3+0x18> + 10fc: 00054c63 bltz a0,1114 <__modsi3+0x20> + 1100: f79ff0ef jal ra,1078 <__udivsi3> + 1104: 00058513 mv a0,a1 + 1108: 00028067 jr t0 + 110c: 40b005b3 neg a1,a1 + 1110: fe0558e3 bgez a0,1100 <__modsi3+0xc> + 1114: 40a00533 neg a0,a0 + 1118: f61ff0ef jal ra,1078 <__udivsi3> + 111c: 40b00533 neg a0,a1 + 1120: 00028067 jr t0 + +Disassembly of section .srodata: + +00001124 : + 1124: 00fd addi ra,ra,31 + ... + +Disassembly of section .bss: + +00001128 : + ... + +Disassembly of section .sbss: + +00001138 : + 1138: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 1070 addi a2,sp,44 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 1070 addi a2,sp,44 + 12: 0000 unimp + 14: 1124 addi s1,sp,168 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 1070 addi a2,sp,44 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/magic.c b/test/testcases/magic.c new file mode 100644 index 0000000..9cfeb08 --- /dev/null +++ b/test/testcases/magic.c @@ -0,0 +1,74 @@ +#include "io.inc" +int make[3][3]; +int color[10]; +int count[1]; +int i; +int j; + +void origin(int N) { + for (i = 0; i < N; i++) { + for (j = 0; j < N; j++) + make[i][j] = 0; + } +} + +void search(int x, int y, int z) { + int s; + int i; + int j; + if ((y > 0 || y < 0) || x == 0 || + make[x - 1][0] + make[x - 1][1] + make[x - 1][2] == 15) { + if (x == 2 && y == 2) { + make[2][2] = 45 - z; + s = make[0][0] + make[0][1] + make[0][2]; + if (make[1][0] + make[1][1] + make[1][2] == s && + make[2][0] + make[2][1] + make[2][2] == s && + make[0][0] + make[1][0] + make[2][0] == s && + make[0][1] + make[1][1] + make[2][1] == s && + make[0][2] + make[1][2] + make[2][2] == s && + make[0][0] + make[1][1] + make[2][2] == s && + make[2][0] + make[1][1] + make[0][2] == s) { + count[0] = count[0] + 1; + for (i = 0; i <= 2; i++) { + for (j = 0; j <= 2; j++) { + printInt(make[i][j]); + printStr(" "); + } + printStr("\n"); + } + printStr("\n"); + } + } else { + if (y == 2) { + make[x][y] = 15 - make[x][0] - make[x][1]; + if (make[x][y] > 0 && make[x][y] < 10 && color[make[x][y]] == 0) { + color[make[x][y]] = 1; + if (y == 2) + search(x + 1, 0, z + make[x][y]); + else + search(x, y + 1, z + make[x][y]); + color[make[x][y]] = 0; + } + } else { + for (i = 1; i <= 9; i++) { + if (color[i] == 0) { + color[i] = 1; + make[x][y] = i; + if (y == 2) + search(x + 1, 0, z + i); + else + search(x, y + 1, z + i); + make[x][y] = 0; + color[i] = 0; + } + } + } + } + } +} +int main() { + origin(3); + search(0, 0, 0); + printInt(count[0]); + return judgeResult % Mod; // 106 +} diff --git a/test/testcases/magic.data b/test/testcases/magic.data new file mode 100644 index 0000000..1a1c241 --- /dev/null +++ b/test/testcases/magic.data @@ -0,0 +1,80 @@ +@00000000 +37 01 02 00 EF 10 C0 37 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 07 4E 33 45 F5 00 13 05 D5 0A +23 20 A7 4E 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 07 4E B3 C7 D7 00 93 87 97 20 +23 20 F7 4E 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 B7 17 00 00 23 A6 07 48 63 5C A0 04 +B7 17 00 00 93 87 C7 4B 93 16 15 00 B3 86 A6 00 +93 96 26 00 B3 86 F6 00 13 06 10 00 93 05 20 00 +6F 00 00 01 23 A4 07 00 93 87 C7 00 63 8C D7 00 +23 A0 07 00 E3 5A A6 FE 23 A2 07 00 E3 C4 A5 FE +6F F0 9F FE B7 17 00 00 23 A4 A7 48 B7 17 00 00 +23 A6 A7 48 67 80 00 00 13 01 01 FE 23 2E 11 00 +23 2C 81 00 23 2A 91 00 23 28 21 01 23 26 31 01 +23 24 41 01 23 22 51 01 23 20 61 01 13 09 05 00 +13 0A 06 00 63 9A 05 06 63 06 05 12 13 05 F5 FF +B7 17 00 00 93 87 C7 4B 13 17 15 00 B3 06 A7 00 +93 96 26 00 B3 86 D7 00 03 A6 06 00 83 A6 46 00 +B3 06 D6 00 33 07 A7 00 13 17 27 00 B3 87 E7 00 +83 A7 87 00 B3 87 F6 00 13 07 F0 00 63 8C E7 24 +83 20 C1 01 03 24 81 01 83 24 41 01 03 29 01 01 +83 29 C1 00 03 2A 81 00 83 2A 41 00 03 2B 01 00 +13 01 01 02 67 80 00 00 93 07 20 00 63 0A F5 0A +93 07 20 00 63 98 F5 0A B7 17 00 00 13 17 19 00 +33 07 27 01 13 17 27 00 93 87 C7 4B B3 87 E7 00 +03 A7 07 00 13 06 F0 00 33 06 E6 40 03 A7 47 00 +33 06 E6 40 23 A4 C7 00 13 07 F6 FF 93 07 80 00 +E3 E8 E7 F8 37 17 00 00 93 17 26 00 13 07 07 49 +B3 07 F7 00 83 A7 07 00 E3 9C 07 F6 37 14 00 00 +13 04 04 49 93 17 26 00 B3 07 F4 00 13 07 10 00 +23 A0 E7 00 33 06 46 01 93 05 00 00 13 05 19 00 +EF F0 9F ED B7 17 00 00 13 17 19 00 33 07 27 01 +13 17 27 00 93 87 C7 4B B3 87 E7 00 83 A7 87 00 +93 97 27 00 33 04 F4 00 23 20 04 00 6F F0 5F F2 +63 8A F5 02 37 14 00 00 13 04 04 49 93 04 10 00 +B7 19 00 00 93 89 C9 4B 93 17 19 00 B3 87 27 01 +B3 87 B7 00 93 97 27 00 B3 89 F9 00 93 8A 15 00 +6F 00 80 13 93 07 D0 02 33 8A C7 40 B7 17 00 00 +93 87 C7 4B 23 A0 47 03 03 A6 07 00 03 A8 47 00 +B3 08 06 01 03 A5 87 00 33 87 A8 00 83 A6 C7 00 +83 A5 07 01 03 A3 47 01 B3 87 B6 00 B3 87 67 00 +E3 98 E7 EA B7 17 00 00 93 87 C7 4B 03 AE 87 01 +83 AE C7 01 B3 07 DE 01 B3 87 47 01 E3 9A E7 E8 +B3 07 D6 00 B3 87 C7 01 E3 94 E7 E8 B3 07 B8 00 +B3 87 D7 01 E3 9E E7 E6 B3 07 65 00 B3 87 47 01 +E3 98 E7 E6 33 06 B6 00 33 0A 46 01 E3 12 EA E6 +B3 85 C5 01 E3 9E B8 E4 37 17 00 00 83 27 87 4B +93 87 17 00 23 2C F7 4A 37 14 00 00 13 04 C4 4B +13 0B 44 02 B7 1A 00 00 13 0A 30 00 B7 19 00 00 +13 09 04 00 93 04 00 00 03 25 09 00 EF F0 5F D0 +13 85 CA 47 EF F0 5F D1 93 84 14 00 13 09 49 00 +E3 94 44 FF 13 85 09 48 EF F0 1F D0 13 04 C4 00 +E3 18 64 FD 37 15 00 00 13 05 05 48 EF F0 DF CE +6F F0 1F DF 93 07 10 00 23 22 F4 00 23 A0 99 00 +33 06 9A 00 93 85 0A 00 13 05 09 00 EF F0 DF D5 +23 A0 09 00 23 22 04 00 93 84 14 00 13 04 44 00 +93 07 A0 00 E3 8E F4 DA 83 27 44 00 E3 96 07 FE +6F F0 5F FC 93 07 20 00 E3 1C F9 DC 6F F0 9F E8 +13 01 01 FF 23 26 11 00 13 05 30 00 EF F0 9F CB +13 06 00 00 93 05 00 00 13 05 00 00 EF F0 DF D0 +B7 17 00 00 03 A5 87 4B EF F0 9F C5 93 05 D0 0F +B7 17 00 00 03 A5 07 4E EF 00 40 09 83 20 C1 00 +13 01 01 01 67 80 00 00 63 40 05 06 63 C6 05 06 +13 86 05 00 93 05 05 00 13 05 F0 FF 63 0C 06 02 +93 06 10 00 63 7A B6 00 63 58 C0 00 13 16 16 00 +93 96 16 00 E3 6A B6 FE 13 05 00 00 63 E6 C5 00 +B3 85 C5 40 33 65 D5 00 93 D6 16 00 13 56 16 00 +E3 96 06 FE 67 80 00 00 93 82 00 00 EF F0 5F FB +13 85 05 00 67 80 02 00 33 05 A0 40 63 D8 05 00 +B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 93 82 00 00 +EF F0 1F F9 33 05 A0 40 67 80 02 00 93 82 00 00 +63 CA 05 00 63 4C 05 00 EF F0 9F F7 13 85 05 00 +67 80 02 00 B3 05 B0 40 E3 58 05 FE 33 05 A0 40 +EF F0 1F F6 33 05 B0 40 67 80 02 00 +@0000147C +20 00 00 00 0A 00 00 00 +@00001484 +FD 00 00 00 diff --git a/test/testcases/magic.dump b/test/testcases/magic.dump new file mode 100644 index 0000000..37efaec --- /dev/null +++ b/test/testcases/magic.dump @@ -0,0 +1,612 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 37c010ef jal ra,1380
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 4e072783 lw a5,1248(a4) # 14e0 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 4ea72023 sw a0,1248(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 4e072683 lw a3,1248(a4) # 14e0 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 4ef72023 sw a5,1248(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044 : + 1044: 000017b7 lui a5,0x1 + 1048: 4807a623 sw zero,1164(a5) # 148c + 104c: 04a05c63 blez a0,10a4 + 1050: 000017b7 lui a5,0x1 + 1054: 4bc78793 addi a5,a5,1212 # 14bc + 1058: 00151693 slli a3,a0,0x1 + 105c: 00a686b3 add a3,a3,a0 + 1060: 00269693 slli a3,a3,0x2 + 1064: 00f686b3 add a3,a3,a5 + 1068: 00100613 li a2,1 + 106c: 00200593 li a1,2 + 1070: 0100006f j 1080 + 1074: 0007a423 sw zero,8(a5) + 1078: 00c78793 addi a5,a5,12 + 107c: 00d78c63 beq a5,a3,1094 + 1080: 0007a023 sw zero,0(a5) + 1084: fea65ae3 bge a2,a0,1078 + 1088: 0007a223 sw zero,4(a5) + 108c: fea5c4e3 blt a1,a0,1074 + 1090: fe9ff06f j 1078 + 1094: 000017b7 lui a5,0x1 + 1098: 48a7a423 sw a0,1160(a5) # 1488 <__bss_start> + 109c: 000017b7 lui a5,0x1 + 10a0: 48a7a623 sw a0,1164(a5) # 148c + 10a4: 00008067 ret + +000010a8 : + 10a8: fe010113 addi sp,sp,-32 # 1ffe0 <__heap_start+0x1dfe0> + 10ac: 00112e23 sw ra,28(sp) + 10b0: 00812c23 sw s0,24(sp) + 10b4: 00912a23 sw s1,20(sp) + 10b8: 01212823 sw s2,16(sp) + 10bc: 01312623 sw s3,12(sp) + 10c0: 01412423 sw s4,8(sp) + 10c4: 01512223 sw s5,4(sp) + 10c8: 01612023 sw s6,0(sp) + 10cc: 00050913 mv s2,a0 + 10d0: 00060a13 mv s4,a2 + 10d4: 06059a63 bnez a1,1148 + 10d8: 12050663 beqz a0,1204 + 10dc: fff50513 addi a0,a0,-1 + 10e0: 000017b7 lui a5,0x1 + 10e4: 4bc78793 addi a5,a5,1212 # 14bc + 10e8: 00151713 slli a4,a0,0x1 + 10ec: 00a706b3 add a3,a4,a0 + 10f0: 00269693 slli a3,a3,0x2 + 10f4: 00d786b3 add a3,a5,a3 + 10f8: 0006a603 lw a2,0(a3) + 10fc: 0046a683 lw a3,4(a3) + 1100: 00d606b3 add a3,a2,a3 + 1104: 00a70733 add a4,a4,a0 + 1108: 00271713 slli a4,a4,0x2 + 110c: 00e787b3 add a5,a5,a4 + 1110: 0087a783 lw a5,8(a5) + 1114: 00f687b3 add a5,a3,a5 + 1118: 00f00713 li a4,15 + 111c: 24e78c63 beq a5,a4,1374 + 1120: 01c12083 lw ra,28(sp) + 1124: 01812403 lw s0,24(sp) + 1128: 01412483 lw s1,20(sp) + 112c: 01012903 lw s2,16(sp) + 1130: 00c12983 lw s3,12(sp) + 1134: 00812a03 lw s4,8(sp) + 1138: 00412a83 lw s5,4(sp) + 113c: 00012b03 lw s6,0(sp) + 1140: 02010113 addi sp,sp,32 + 1144: 00008067 ret + 1148: 00200793 li a5,2 + 114c: 0af50a63 beq a0,a5,1200 + 1150: 00200793 li a5,2 + 1154: 0af59863 bne a1,a5,1204 + 1158: 000017b7 lui a5,0x1 + 115c: 00191713 slli a4,s2,0x1 + 1160: 01270733 add a4,a4,s2 + 1164: 00271713 slli a4,a4,0x2 + 1168: 4bc78793 addi a5,a5,1212 # 14bc + 116c: 00e787b3 add a5,a5,a4 + 1170: 0007a703 lw a4,0(a5) + 1174: 00f00613 li a2,15 + 1178: 40e60633 sub a2,a2,a4 + 117c: 0047a703 lw a4,4(a5) + 1180: 40e60633 sub a2,a2,a4 + 1184: 00c7a423 sw a2,8(a5) + 1188: fff60713 addi a4,a2,-1 + 118c: 00800793 li a5,8 + 1190: f8e7e8e3 bltu a5,a4,1120 + 1194: 00001737 lui a4,0x1 + 1198: 00261793 slli a5,a2,0x2 + 119c: 49070713 addi a4,a4,1168 # 1490 + 11a0: 00f707b3 add a5,a4,a5 + 11a4: 0007a783 lw a5,0(a5) + 11a8: f6079ce3 bnez a5,1120 + 11ac: 00001437 lui s0,0x1 + 11b0: 49040413 addi s0,s0,1168 # 1490 + 11b4: 00261793 slli a5,a2,0x2 + 11b8: 00f407b3 add a5,s0,a5 + 11bc: 00100713 li a4,1 + 11c0: 00e7a023 sw a4,0(a5) + 11c4: 01460633 add a2,a2,s4 + 11c8: 00000593 li a1,0 + 11cc: 00190513 addi a0,s2,1 + 11d0: ed9ff0ef jal ra,10a8 + 11d4: 000017b7 lui a5,0x1 + 11d8: 00191713 slli a4,s2,0x1 + 11dc: 01270733 add a4,a4,s2 + 11e0: 00271713 slli a4,a4,0x2 + 11e4: 4bc78793 addi a5,a5,1212 # 14bc + 11e8: 00e787b3 add a5,a5,a4 + 11ec: 0087a783 lw a5,8(a5) + 11f0: 00279793 slli a5,a5,0x2 + 11f4: 00f40433 add s0,s0,a5 + 11f8: 00042023 sw zero,0(s0) + 11fc: f25ff06f j 1120 + 1200: 02f58a63 beq a1,a5,1234 + 1204: 00001437 lui s0,0x1 + 1208: 49040413 addi s0,s0,1168 # 1490 + 120c: 00100493 li s1,1 + 1210: 000019b7 lui s3,0x1 + 1214: 4bc98993 addi s3,s3,1212 # 14bc + 1218: 00191793 slli a5,s2,0x1 + 121c: 012787b3 add a5,a5,s2 + 1220: 00b787b3 add a5,a5,a1 + 1224: 00279793 slli a5,a5,0x2 + 1228: 00f989b3 add s3,s3,a5 + 122c: 00158a93 addi s5,a1,1 + 1230: 1380006f j 1368 + 1234: 02d00793 li a5,45 + 1238: 40c78a33 sub s4,a5,a2 + 123c: 000017b7 lui a5,0x1 + 1240: 4bc78793 addi a5,a5,1212 # 14bc + 1244: 0347a023 sw s4,32(a5) + 1248: 0007a603 lw a2,0(a5) + 124c: 0047a803 lw a6,4(a5) + 1250: 010608b3 add a7,a2,a6 + 1254: 0087a503 lw a0,8(a5) + 1258: 00a88733 add a4,a7,a0 + 125c: 00c7a683 lw a3,12(a5) + 1260: 0107a583 lw a1,16(a5) + 1264: 0147a303 lw t1,20(a5) + 1268: 00b687b3 add a5,a3,a1 + 126c: 006787b3 add a5,a5,t1 + 1270: eae798e3 bne a5,a4,1120 + 1274: 000017b7 lui a5,0x1 + 1278: 4bc78793 addi a5,a5,1212 # 14bc + 127c: 0187ae03 lw t3,24(a5) + 1280: 01c7ae83 lw t4,28(a5) + 1284: 01de07b3 add a5,t3,t4 + 1288: 014787b3 add a5,a5,s4 + 128c: e8e79ae3 bne a5,a4,1120 + 1290: 00d607b3 add a5,a2,a3 + 1294: 01c787b3 add a5,a5,t3 + 1298: e8e794e3 bne a5,a4,1120 + 129c: 00b807b3 add a5,a6,a1 + 12a0: 01d787b3 add a5,a5,t4 + 12a4: e6e79ee3 bne a5,a4,1120 + 12a8: 006507b3 add a5,a0,t1 + 12ac: 014787b3 add a5,a5,s4 + 12b0: e6e798e3 bne a5,a4,1120 + 12b4: 00b60633 add a2,a2,a1 + 12b8: 01460a33 add s4,a2,s4 + 12bc: e6ea12e3 bne s4,a4,1120 + 12c0: 01c585b3 add a1,a1,t3 + 12c4: e4b89ee3 bne a7,a1,1120 + 12c8: 00001737 lui a4,0x1 + 12cc: 4b872783 lw a5,1208(a4) # 14b8 + 12d0: 00178793 addi a5,a5,1 + 12d4: 4af72c23 sw a5,1208(a4) + 12d8: 00001437 lui s0,0x1 + 12dc: 4bc40413 addi s0,s0,1212 # 14bc + 12e0: 02440b13 addi s6,s0,36 + 12e4: 00001ab7 lui s5,0x1 + 12e8: 00300a13 li s4,3 + 12ec: 000019b7 lui s3,0x1 + 12f0: 00040913 mv s2,s0 + 12f4: 00000493 li s1,0 + 12f8: 00092503 lw a0,0(s2) + 12fc: d05ff0ef jal ra,1000 + 1300: 47ca8513 addi a0,s5,1148 # 147c <__modsi3+0x30> + 1304: d15ff0ef jal ra,1018 + 1308: 00148493 addi s1,s1,1 + 130c: 00490913 addi s2,s2,4 + 1310: ff4494e3 bne s1,s4,12f8 + 1314: 48098513 addi a0,s3,1152 # 1480 <__modsi3+0x34> + 1318: d01ff0ef jal ra,1018 + 131c: 00c40413 addi s0,s0,12 + 1320: fd6418e3 bne s0,s6,12f0 + 1324: 00001537 lui a0,0x1 + 1328: 48050513 addi a0,a0,1152 # 1480 <__modsi3+0x34> + 132c: cedff0ef jal ra,1018 + 1330: df1ff06f j 1120 + 1334: 00100793 li a5,1 + 1338: 00f42223 sw a5,4(s0) + 133c: 0099a023 sw s1,0(s3) + 1340: 009a0633 add a2,s4,s1 + 1344: 000a8593 mv a1,s5 + 1348: 00090513 mv a0,s2 + 134c: d5dff0ef jal ra,10a8 + 1350: 0009a023 sw zero,0(s3) + 1354: 00042223 sw zero,4(s0) + 1358: 00148493 addi s1,s1,1 + 135c: 00440413 addi s0,s0,4 + 1360: 00a00793 li a5,10 + 1364: daf48ee3 beq s1,a5,1120 + 1368: 00442783 lw a5,4(s0) + 136c: fe0796e3 bnez a5,1358 + 1370: fc5ff06f j 1334 + 1374: 00200793 li a5,2 + 1378: dcf91ce3 bne s2,a5,1150 + 137c: e89ff06f j 1204 + +00001380
: + 1380: ff010113 addi sp,sp,-16 + 1384: 00112623 sw ra,12(sp) + 1388: 00300513 li a0,3 + 138c: cb9ff0ef jal ra,1044 + 1390: 00000613 li a2,0 + 1394: 00000593 li a1,0 + 1398: 00000513 li a0,0 + 139c: d0dff0ef jal ra,10a8 + 13a0: 000017b7 lui a5,0x1 + 13a4: 4b87a503 lw a0,1208(a5) # 14b8 + 13a8: c59ff0ef jal ra,1000 + 13ac: 0fd00593 li a1,253 + 13b0: 000017b7 lui a5,0x1 + 13b4: 4e07a503 lw a0,1248(a5) # 14e0 <__bss_end> + 13b8: 094000ef jal ra,144c <__modsi3> + 13bc: 00c12083 lw ra,12(sp) + 13c0: 01010113 addi sp,sp,16 + 13c4: 00008067 ret + +000013c8 <__divsi3>: + 13c8: 06054063 bltz a0,1428 <__umodsi3+0x10> + 13cc: 0605c663 bltz a1,1438 <__umodsi3+0x20> + +000013d0 <__udivsi3>: + 13d0: 00058613 mv a2,a1 + 13d4: 00050593 mv a1,a0 + 13d8: fff00513 li a0,-1 + 13dc: 02060c63 beqz a2,1414 <__udivsi3+0x44> + 13e0: 00100693 li a3,1 + 13e4: 00b67a63 bgeu a2,a1,13f8 <__udivsi3+0x28> + 13e8: 00c05863 blez a2,13f8 <__udivsi3+0x28> + 13ec: 00161613 slli a2,a2,0x1 + 13f0: 00169693 slli a3,a3,0x1 + 13f4: feb66ae3 bltu a2,a1,13e8 <__udivsi3+0x18> + 13f8: 00000513 li a0,0 + 13fc: 00c5e663 bltu a1,a2,1408 <__udivsi3+0x38> + 1400: 40c585b3 sub a1,a1,a2 + 1404: 00d56533 or a0,a0,a3 + 1408: 0016d693 srli a3,a3,0x1 + 140c: 00165613 srli a2,a2,0x1 + 1410: fe0696e3 bnez a3,13fc <__udivsi3+0x2c> + 1414: 00008067 ret + +00001418 <__umodsi3>: + 1418: 00008293 mv t0,ra + 141c: fb5ff0ef jal ra,13d0 <__udivsi3> + 1420: 00058513 mv a0,a1 + 1424: 00028067 jr t0 + 1428: 40a00533 neg a0,a0 + 142c: 0005d863 bgez a1,143c <__umodsi3+0x24> + 1430: 40b005b3 neg a1,a1 + 1434: f9dff06f j 13d0 <__udivsi3> + 1438: 40b005b3 neg a1,a1 + 143c: 00008293 mv t0,ra + 1440: f91ff0ef jal ra,13d0 <__udivsi3> + 1444: 40a00533 neg a0,a0 + 1448: 00028067 jr t0 + +0000144c <__modsi3>: + 144c: 00008293 mv t0,ra + 1450: 0005ca63 bltz a1,1464 <__modsi3+0x18> + 1454: 00054c63 bltz a0,146c <__modsi3+0x20> + 1458: f79ff0ef jal ra,13d0 <__udivsi3> + 145c: 00058513 mv a0,a1 + 1460: 00028067 jr t0 + 1464: 40b005b3 neg a1,a1 + 1468: fe0558e3 bgez a0,1458 <__modsi3+0xc> + 146c: 40a00533 neg a0,a0 + 1470: f61ff0ef jal ra,13d0 <__udivsi3> + 1474: 40b00533 neg a0,a1 + 1478: 00028067 jr t0 + +Disassembly of section .rodata.str1.4: + +0000147c <.rodata.str1.4>: + 147c: 0020 addi s0,sp,8 + 147e: 0000 unimp + 1480: 000a c.slli zero,0x2 + ... + +Disassembly of section .srodata: + +00001484 : + 1484: 00fd addi ra,ra,31 + ... + +Disassembly of section .bss: + +00001488 : + 1488: 0000 unimp + ... + +0000148c : + 148c: 0000 unimp + ... + +00001490 : + ... + +000014b8 : + 14b8: 0000 unimp + ... + +000014bc : + ... + +Disassembly of section .sbss: + +000014e0 : + 14e0: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 13c8 addi a0,sp,484 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 13c8 addi a0,sp,484 + 12: 0000 unimp + 14: 147c addi a5,sp,556 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 13c8 addi a0,sp,484 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/manyarguments.c b/test/testcases/manyarguments.c new file mode 100644 index 0000000..72eaac8 --- /dev/null +++ b/test/testcases/manyarguments.c @@ -0,0 +1,11 @@ +#include "io.inc" +int a(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, + int a10, int a11, int a12, int a13, int a14, int a15) { + return a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13 + + a14 + a15; +} + +int main() { + printInt(a(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)); + return judgeResult % Mod; // 40 +} diff --git a/test/testcases/manyarguments.data b/test/testcases/manyarguments.data new file mode 100644 index 0000000..701133d --- /dev/null +++ b/test/testcases/manyarguments.data @@ -0,0 +1,30 @@ +@00000000 +37 01 02 00 EF 10 80 09 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 07 18 33 45 F5 00 13 05 D5 0A +23 20 A7 18 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 07 18 B3 C7 D7 00 93 87 97 20 +23 20 F7 18 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 B3 05 B5 00 B3 85 C5 00 B3 85 D5 00 +B3 85 E5 00 B3 85 F5 00 B3 85 05 01 B3 85 15 01 +83 27 01 00 B3 87 F5 00 83 25 41 00 B3 87 B7 00 +83 25 81 00 B3 87 B7 00 03 25 C1 00 B3 87 A7 00 +03 25 01 01 B3 87 A7 00 03 25 41 01 B3 87 A7 00 +03 25 81 01 33 85 A7 00 67 80 00 00 13 01 01 FF +23 26 11 00 13 05 80 07 EF F0 9F F5 93 05 D0 0F +B7 17 00 00 03 A5 07 18 EF 00 40 09 83 20 C1 00 +13 01 01 01 67 80 00 00 63 40 05 06 63 C6 05 06 +13 86 05 00 93 05 05 00 13 05 F0 FF 63 0C 06 02 +93 06 10 00 63 7A B6 00 63 58 C0 00 13 16 16 00 +93 96 16 00 E3 6A B6 FE 13 05 00 00 63 E6 C5 00 +B3 85 C5 40 33 65 D5 00 93 D6 16 00 13 56 16 00 +E3 96 06 FE 67 80 00 00 93 82 00 00 EF F0 5F FB +13 85 05 00 67 80 02 00 33 05 A0 40 63 D8 05 00 +B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 93 82 00 00 +EF F0 1F F9 33 05 A0 40 67 80 02 00 93 82 00 00 +63 CA 05 00 63 4C 05 00 EF F0 9F F7 13 85 05 00 +67 80 02 00 B3 05 B0 40 E3 58 05 FE 33 05 A0 40 +EF F0 1F F6 33 05 B0 40 67 80 02 00 +@0000117C +FD 00 00 00 diff --git a/test/testcases/manyarguments.dump b/test/testcases/manyarguments.dump new file mode 100644 index 0000000..baee43e --- /dev/null +++ b/test/testcases/manyarguments.dump @@ -0,0 +1,390 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 098010ef jal ra,109c
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 18072783 lw a5,384(a4) # 1180 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 18a72023 sw a0,384(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 18072683 lw a3,384(a4) # 1180 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 18f72023 sw a5,384(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044 : + 1044: 00b505b3 add a1,a0,a1 + 1048: 00c585b3 add a1,a1,a2 + 104c: 00d585b3 add a1,a1,a3 + 1050: 00e585b3 add a1,a1,a4 + 1054: 00f585b3 add a1,a1,a5 + 1058: 010585b3 add a1,a1,a6 + 105c: 011585b3 add a1,a1,a7 + 1060: 00012783 lw a5,0(sp) # 20000 <__heap_start+0x1e000> + 1064: 00f587b3 add a5,a1,a5 + 1068: 00412583 lw a1,4(sp) + 106c: 00b787b3 add a5,a5,a1 + 1070: 00812583 lw a1,8(sp) + 1074: 00b787b3 add a5,a5,a1 + 1078: 00c12503 lw a0,12(sp) + 107c: 00a787b3 add a5,a5,a0 + 1080: 01012503 lw a0,16(sp) + 1084: 00a787b3 add a5,a5,a0 + 1088: 01412503 lw a0,20(sp) + 108c: 00a787b3 add a5,a5,a0 + 1090: 01812503 lw a0,24(sp) + 1094: 00a78533 add a0,a5,a0 + 1098: 00008067 ret + +0000109c
: + 109c: ff010113 addi sp,sp,-16 + 10a0: 00112623 sw ra,12(sp) + 10a4: 07800513 li a0,120 + 10a8: f59ff0ef jal ra,1000 + 10ac: 0fd00593 li a1,253 + 10b0: 000017b7 lui a5,0x1 + 10b4: 1807a503 lw a0,384(a5) # 1180 <__bss_end> + 10b8: 094000ef jal ra,114c <__modsi3> + 10bc: 00c12083 lw ra,12(sp) + 10c0: 01010113 addi sp,sp,16 + 10c4: 00008067 ret + +000010c8 <__divsi3>: + 10c8: 06054063 bltz a0,1128 <__umodsi3+0x10> + 10cc: 0605c663 bltz a1,1138 <__umodsi3+0x20> + +000010d0 <__udivsi3>: + 10d0: 00058613 mv a2,a1 + 10d4: 00050593 mv a1,a0 + 10d8: fff00513 li a0,-1 + 10dc: 02060c63 beqz a2,1114 <__udivsi3+0x44> + 10e0: 00100693 li a3,1 + 10e4: 00b67a63 bgeu a2,a1,10f8 <__udivsi3+0x28> + 10e8: 00c05863 blez a2,10f8 <__udivsi3+0x28> + 10ec: 00161613 slli a2,a2,0x1 + 10f0: 00169693 slli a3,a3,0x1 + 10f4: feb66ae3 bltu a2,a1,10e8 <__udivsi3+0x18> + 10f8: 00000513 li a0,0 + 10fc: 00c5e663 bltu a1,a2,1108 <__udivsi3+0x38> + 1100: 40c585b3 sub a1,a1,a2 + 1104: 00d56533 or a0,a0,a3 + 1108: 0016d693 srli a3,a3,0x1 + 110c: 00165613 srli a2,a2,0x1 + 1110: fe0696e3 bnez a3,10fc <__udivsi3+0x2c> + 1114: 00008067 ret + +00001118 <__umodsi3>: + 1118: 00008293 mv t0,ra + 111c: fb5ff0ef jal ra,10d0 <__udivsi3> + 1120: 00058513 mv a0,a1 + 1124: 00028067 jr t0 + 1128: 40a00533 neg a0,a0 + 112c: 0005d863 bgez a1,113c <__umodsi3+0x24> + 1130: 40b005b3 neg a1,a1 + 1134: f9dff06f j 10d0 <__udivsi3> + 1138: 40b005b3 neg a1,a1 + 113c: 00008293 mv t0,ra + 1140: f91ff0ef jal ra,10d0 <__udivsi3> + 1144: 40a00533 neg a0,a0 + 1148: 00028067 jr t0 + +0000114c <__modsi3>: + 114c: 00008293 mv t0,ra + 1150: 0005ca63 bltz a1,1164 <__modsi3+0x18> + 1154: 00054c63 bltz a0,116c <__modsi3+0x20> + 1158: f79ff0ef jal ra,10d0 <__udivsi3> + 115c: 00058513 mv a0,a1 + 1160: 00028067 jr t0 + 1164: 40b005b3 neg a1,a1 + 1168: fe0558e3 bgez a0,1158 <__modsi3+0xc> + 116c: 40a00533 neg a0,a0 + 1170: f61ff0ef jal ra,10d0 <__udivsi3> + 1174: 40b00533 neg a0,a1 + 1178: 00028067 jr t0 + +Disassembly of section .srodata: + +0000117c : + 117c: 00fd addi ra,ra,31 + ... + +Disassembly of section .sbss: + +00001180 : + 1180: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 10c8 addi a0,sp,100 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 10c8 addi a0,sp,100 + 12: 0000 unimp + 14: 117c addi a5,sp,172 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 10c8 addi a0,sp,100 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/multiarray.c b/test/testcases/multiarray.c new file mode 100644 index 0000000..2e73175 --- /dev/null +++ b/test/testcases/multiarray.c @@ -0,0 +1,37 @@ +#include "io.inc" +int a[4][11]; +int i; +int j; + +struct rec { + int num; + int c; +} b[5]; + +void printNum(int num) { printInt(num); } + +int main() { + for (i = 0; i < 4; i++) { + for (j = 0; j < 10; j++) + a[i][j] = 888; + } + for (i = 0; i < 5; i++) { + b[i].num = -1; + } + + printNum(a[3][9]); + for (i = 0; i <= 3; i++) + for (j = 0; j <= 9; j++) + a[i][j] = i * 10 + j; + + for (i = 0; i <= 3; i++) + for (j = 0; j <= 9; j++) + printNum(a[i][j]); + a[2][10] = 0; + printNum(a[2][10]); + b[0].num = -2; + b[a[2][10]].num = -10; + printNum(b[0].num); + printNum(b[1].num); + return judgeResult % Mod; // 115 +} diff --git a/test/testcases/multiarray.data b/test/testcases/multiarray.data new file mode 100644 index 0000000..67deee0 --- /dev/null +++ b/test/testcases/multiarray.data @@ -0,0 +1,50 @@ +@00000000 +37 01 02 00 EF 10 80 05 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 C7 39 33 45 F5 00 13 05 D5 0A +23 2E A7 38 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 C7 39 B3 C7 D7 00 93 87 97 20 +23 2E F7 38 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FF 23 26 11 00 EF F0 5F FB +83 20 C1 00 13 01 01 01 67 80 00 00 13 01 01 FE +23 2E 11 00 23 2C 81 00 23 2A 91 00 23 28 21 01 +23 26 31 01 23 24 41 01 37 14 00 00 13 04 C4 2E +13 07 84 02 13 06 84 0D 93 06 80 37 6F 00 C0 00 +13 07 C7 02 63 0C C7 00 93 07 87 FD 23 A0 D7 00 +93 87 47 00 E3 9C E7 FE 6F F0 9F FE B7 17 00 00 +13 07 A0 00 23 A2 E7 2E B7 17 00 00 93 87 C7 2B +13 07 F0 FF 23 A0 E7 00 23 A4 E7 00 23 A8 E7 00 +23 AC E7 00 23 A0 E7 02 B7 17 00 00 13 07 50 00 +23 A4 E7 2E B7 17 00 00 03 A5 47 39 EF F0 5F F1 +93 06 A0 00 13 06 20 03 93 87 66 FF 13 07 04 00 +23 20 F7 00 93 87 17 00 13 07 47 00 E3 9A F6 FE +13 04 C4 02 93 86 A6 00 E3 90 C6 FE B7 17 00 00 +23 A4 07 2E 37 14 00 00 37 19 00 00 13 09 C9 2E +93 84 07 00 93 09 90 00 13 0A 30 00 23 22 04 2E +13 07 00 00 83 A6 84 2E 93 97 16 00 B3 87 D7 00 +93 97 27 00 B3 87 D7 40 B3 87 E7 00 93 97 27 00 +B3 07 F9 00 03 A5 07 00 EF F0 9F E9 83 27 44 2E +13 87 17 00 23 22 E4 2E E3 D6 E9 FC 83 A7 84 2E +93 87 17 00 23 A4 F4 2E E3 5A FA FA B7 14 00 00 +93 84 C4 2E 23 A0 04 08 13 05 00 00 EF F0 5F E6 +37 14 00 00 13 04 C4 2B 93 07 E0 FF 23 20 F4 00 +83 A7 04 08 93 97 37 00 B3 07 F4 00 13 07 60 FF +23 A0 E7 00 03 25 04 00 EF F0 9F E3 03 25 84 00 +EF F0 1F E3 93 05 D0 0F B7 17 00 00 03 A5 C7 39 +EF 00 80 0A 83 20 C1 01 03 24 81 01 83 24 41 01 +03 29 01 01 83 29 C1 00 03 2A 81 00 13 01 01 02 +67 80 00 00 63 40 05 06 63 C6 05 06 13 86 05 00 +93 05 05 00 13 05 F0 FF 63 0C 06 02 93 06 10 00 +63 7A B6 00 63 58 C0 00 13 16 16 00 93 96 16 00 +E3 6A B6 FE 13 05 00 00 63 E6 C5 00 B3 85 C5 40 +33 65 D5 00 93 D6 16 00 13 56 16 00 E3 96 06 FE +67 80 00 00 93 82 00 00 EF F0 5F FB 13 85 05 00 +67 80 02 00 33 05 A0 40 63 D8 05 00 B3 05 B0 40 +6F F0 DF F9 B3 05 B0 40 93 82 00 00 EF F0 1F F9 +33 05 A0 40 67 80 02 00 93 82 00 00 63 CA 05 00 +63 4C 05 00 EF F0 9F F7 13 85 05 00 67 80 02 00 +B3 05 B0 40 E3 58 05 FE 33 05 A0 40 EF F0 1F F6 +33 05 B0 40 67 80 02 00 +@000012B8 +FD 00 00 00 diff --git a/test/testcases/multiarray.dump b/test/testcases/multiarray.dump new file mode 100644 index 0000000..b3ce942 --- /dev/null +++ b/test/testcases/multiarray.dump @@ -0,0 +1,485 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 058010ef jal ra,105c
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 39c72783 lw a5,924(a4) # 139c <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 38a72e23 sw a0,924(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 39c72683 lw a3,924(a4) # 139c <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 38f72e23 sw a5,924(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044 : + 1044: ff010113 addi sp,sp,-16 # 1fff0 <__heap_start+0x1dff0> + 1048: 00112623 sw ra,12(sp) + 104c: fb5ff0ef jal ra,1000 + 1050: 00c12083 lw ra,12(sp) + 1054: 01010113 addi sp,sp,16 + 1058: 00008067 ret + +0000105c
: + 105c: fe010113 addi sp,sp,-32 + 1060: 00112e23 sw ra,28(sp) + 1064: 00812c23 sw s0,24(sp) + 1068: 00912a23 sw s1,20(sp) + 106c: 01212823 sw s2,16(sp) + 1070: 01312623 sw s3,12(sp) + 1074: 01412423 sw s4,8(sp) + 1078: 00001437 lui s0,0x1 + 107c: 2ec40413 addi s0,s0,748 # 12ec + 1080: 02840713 addi a4,s0,40 + 1084: 0d840613 addi a2,s0,216 + 1088: 37800693 li a3,888 + 108c: 00c0006f j 1098 + 1090: 02c70713 addi a4,a4,44 + 1094: 00c70c63 beq a4,a2,10ac + 1098: fd870793 addi a5,a4,-40 + 109c: 00d7a023 sw a3,0(a5) + 10a0: 00478793 addi a5,a5,4 + 10a4: fee79ce3 bne a5,a4,109c + 10a8: fe9ff06f j 1090 + 10ac: 000017b7 lui a5,0x1 + 10b0: 00a00713 li a4,10 + 10b4: 2ee7a223 sw a4,740(a5) # 12e4 + 10b8: 000017b7 lui a5,0x1 + 10bc: 2bc78793 addi a5,a5,700 # 12bc <__bss_start> + 10c0: fff00713 li a4,-1 + 10c4: 00e7a023 sw a4,0(a5) + 10c8: 00e7a423 sw a4,8(a5) + 10cc: 00e7a823 sw a4,16(a5) + 10d0: 00e7ac23 sw a4,24(a5) + 10d4: 02e7a023 sw a4,32(a5) + 10d8: 000017b7 lui a5,0x1 + 10dc: 00500713 li a4,5 + 10e0: 2ee7a423 sw a4,744(a5) # 12e8 + 10e4: 000017b7 lui a5,0x1 + 10e8: 3947a503 lw a0,916(a5) # 1394 + 10ec: f15ff0ef jal ra,1000 + 10f0: 00a00693 li a3,10 + 10f4: 03200613 li a2,50 + 10f8: ff668793 addi a5,a3,-10 + 10fc: 00040713 mv a4,s0 + 1100: 00f72023 sw a5,0(a4) + 1104: 00178793 addi a5,a5,1 + 1108: 00470713 addi a4,a4,4 + 110c: fef69ae3 bne a3,a5,1100 + 1110: 02c40413 addi s0,s0,44 + 1114: 00a68693 addi a3,a3,10 + 1118: fec690e3 bne a3,a2,10f8 + 111c: 000017b7 lui a5,0x1 + 1120: 2e07a423 sw zero,744(a5) # 12e8 + 1124: 00001437 lui s0,0x1 + 1128: 00001937 lui s2,0x1 + 112c: 2ec90913 addi s2,s2,748 # 12ec + 1130: 00078493 mv s1,a5 + 1134: 00900993 li s3,9 + 1138: 00300a13 li s4,3 + 113c: 2e042223 sw zero,740(s0) # 12e4 + 1140: 00000713 li a4,0 + 1144: 2e84a683 lw a3,744(s1) + 1148: 00169793 slli a5,a3,0x1 + 114c: 00d787b3 add a5,a5,a3 + 1150: 00279793 slli a5,a5,0x2 + 1154: 40d787b3 sub a5,a5,a3 + 1158: 00e787b3 add a5,a5,a4 + 115c: 00279793 slli a5,a5,0x2 + 1160: 00f907b3 add a5,s2,a5 + 1164: 0007a503 lw a0,0(a5) + 1168: e99ff0ef jal ra,1000 + 116c: 2e442783 lw a5,740(s0) + 1170: 00178713 addi a4,a5,1 + 1174: 2ee42223 sw a4,740(s0) + 1178: fce9d6e3 bge s3,a4,1144 + 117c: 2e84a783 lw a5,744(s1) + 1180: 00178793 addi a5,a5,1 + 1184: 2ef4a423 sw a5,744(s1) + 1188: fafa5ae3 bge s4,a5,113c + 118c: 000014b7 lui s1,0x1 + 1190: 2ec48493 addi s1,s1,748 # 12ec + 1194: 0804a023 sw zero,128(s1) + 1198: 00000513 li a0,0 + 119c: e65ff0ef jal ra,1000 + 11a0: 00001437 lui s0,0x1 + 11a4: 2bc40413 addi s0,s0,700 # 12bc <__bss_start> + 11a8: ffe00793 li a5,-2 + 11ac: 00f42023 sw a5,0(s0) + 11b0: 0804a783 lw a5,128(s1) + 11b4: 00379793 slli a5,a5,0x3 + 11b8: 00f407b3 add a5,s0,a5 + 11bc: ff600713 li a4,-10 + 11c0: 00e7a023 sw a4,0(a5) + 11c4: 00042503 lw a0,0(s0) + 11c8: e39ff0ef jal ra,1000 + 11cc: 00842503 lw a0,8(s0) + 11d0: e31ff0ef jal ra,1000 + 11d4: 0fd00593 li a1,253 + 11d8: 000017b7 lui a5,0x1 + 11dc: 39c7a503 lw a0,924(a5) # 139c <__bss_end> + 11e0: 0a8000ef jal ra,1288 <__modsi3> + 11e4: 01c12083 lw ra,28(sp) + 11e8: 01812403 lw s0,24(sp) + 11ec: 01412483 lw s1,20(sp) + 11f0: 01012903 lw s2,16(sp) + 11f4: 00c12983 lw s3,12(sp) + 11f8: 00812a03 lw s4,8(sp) + 11fc: 02010113 addi sp,sp,32 + 1200: 00008067 ret + +00001204 <__divsi3>: + 1204: 06054063 bltz a0,1264 <__umodsi3+0x10> + 1208: 0605c663 bltz a1,1274 <__umodsi3+0x20> + +0000120c <__udivsi3>: + 120c: 00058613 mv a2,a1 + 1210: 00050593 mv a1,a0 + 1214: fff00513 li a0,-1 + 1218: 02060c63 beqz a2,1250 <__udivsi3+0x44> + 121c: 00100693 li a3,1 + 1220: 00b67a63 bgeu a2,a1,1234 <__udivsi3+0x28> + 1224: 00c05863 blez a2,1234 <__udivsi3+0x28> + 1228: 00161613 slli a2,a2,0x1 + 122c: 00169693 slli a3,a3,0x1 + 1230: feb66ae3 bltu a2,a1,1224 <__udivsi3+0x18> + 1234: 00000513 li a0,0 + 1238: 00c5e663 bltu a1,a2,1244 <__udivsi3+0x38> + 123c: 40c585b3 sub a1,a1,a2 + 1240: 00d56533 or a0,a0,a3 + 1244: 0016d693 srli a3,a3,0x1 + 1248: 00165613 srli a2,a2,0x1 + 124c: fe0696e3 bnez a3,1238 <__udivsi3+0x2c> + 1250: 00008067 ret + +00001254 <__umodsi3>: + 1254: 00008293 mv t0,ra + 1258: fb5ff0ef jal ra,120c <__udivsi3> + 125c: 00058513 mv a0,a1 + 1260: 00028067 jr t0 + 1264: 40a00533 neg a0,a0 + 1268: 0005d863 bgez a1,1278 <__umodsi3+0x24> + 126c: 40b005b3 neg a1,a1 + 1270: f9dff06f j 120c <__udivsi3> + 1274: 40b005b3 neg a1,a1 + 1278: 00008293 mv t0,ra + 127c: f91ff0ef jal ra,120c <__udivsi3> + 1280: 40a00533 neg a0,a0 + 1284: 00028067 jr t0 + +00001288 <__modsi3>: + 1288: 00008293 mv t0,ra + 128c: 0005ca63 bltz a1,12a0 <__modsi3+0x18> + 1290: 00054c63 bltz a0,12a8 <__modsi3+0x20> + 1294: f79ff0ef jal ra,120c <__udivsi3> + 1298: 00058513 mv a0,a1 + 129c: 00028067 jr t0 + 12a0: 40b005b3 neg a1,a1 + 12a4: fe0558e3 bgez a0,1294 <__modsi3+0xc> + 12a8: 40a00533 neg a0,a0 + 12ac: f61ff0ef jal ra,120c <__udivsi3> + 12b0: 40b00533 neg a0,a1 + 12b4: 00028067 jr t0 + +Disassembly of section .srodata: + +000012b8 : + 12b8: 00fd addi ra,ra,31 + ... + +Disassembly of section .bss: + +000012bc : + ... + +000012e4 : + 12e4: 0000 unimp + ... + +000012e8 : + 12e8: 0000 unimp + ... + +000012ec : + ... + +Disassembly of section .sbss: + +0000139c : + 139c: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 1204 addi s1,sp,288 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 1204 addi s1,sp,288 + 12: 0000 unimp + 14: 12b8 addi a4,sp,360 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 1204 addi s1,sp,288 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/naive.c b/test/testcases/naive.c new file mode 100644 index 0000000..64a4cb9 --- /dev/null +++ b/test/testcases/naive.c @@ -0,0 +1,6 @@ +#include "io.inc" + +int main() { + printInt(177); + return judgeResult; // 94 +} diff --git a/test/testcases/naive.data b/test/testcases/naive.data new file mode 100644 index 0000000..3012470 --- /dev/null +++ b/test/testcases/naive.data @@ -0,0 +1,13 @@ +@00000000 +37 01 02 00 EF 10 00 04 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 C7 06 33 45 F5 00 13 05 D5 0A +23 26 A7 06 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 C7 06 B3 C7 D7 00 93 87 97 20 +23 26 F7 06 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FF 23 26 11 00 13 05 10 0B +EF F0 1F FB B7 17 00 00 03 A5 C7 06 83 20 C1 00 +13 01 01 01 67 80 00 00 +@00001068 +FD 00 00 00 diff --git a/test/testcases/naive.dump b/test/testcases/naive.dump new file mode 100644 index 0000000..f39e2f8 --- /dev/null +++ b/test/testcases/naive.dump @@ -0,0 +1,70 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 040010ef jal ra,1044
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 06c72783 lw a5,108(a4) # 106c <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 06a72623 sw a0,108(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 06c72683 lw a3,108(a4) # 106c <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 06f72623 sw a5,108(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044
: + 1044: ff010113 addi sp,sp,-16 # 1fff0 <__heap_start+0x1dff0> + 1048: 00112623 sw ra,12(sp) + 104c: 0b100513 li a0,177 + 1050: fb1ff0ef jal ra,1000 + 1054: 000017b7 lui a5,0x1 + 1058: 06c7a503 lw a0,108(a5) # 106c <__bss_end> + 105c: 00c12083 lw ra,12(sp) + 1060: 01010113 addi sp,sp,16 + 1064: 00008067 ret + +Disassembly of section .srodata: + +00001068 : + 1068: 00fd addi ra,ra,31 + ... + +Disassembly of section .sbss: + +0000106c : + 106c: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... diff --git a/test/testcases/pi.c b/test/testcases/pi.c new file mode 100644 index 0000000..742a756 --- /dev/null +++ b/test/testcases/pi.c @@ -0,0 +1,33 @@ +#include "io.inc" +int f[2801]; +int main() { + int a = 10000; + int b = 0; + int c = 2800; + int d = 0; + int e = 0; + int g = 0; + + for (; b - c != 0;) + f[b++] = a / 5; + for (;; e = d % a) { + d = 0; + g = c * 2; + if (g == 0) + break; + + for (b = c;; d = d * b) { + d = d + f[b] * a; + f[b] = d % --g; + d = d / g--; + if (--b == 0) + break; + } + + c = c - 14; + printInt(e + d / a); + } + + printStr("\n"); + return judgeResult % Mod; // 137 +} diff --git a/test/testcases/pi.data b/test/testcases/pi.data new file mode 100644 index 0000000..0a7afd1 --- /dev/null +++ b/test/testcases/pi.data @@ -0,0 +1,52 @@ +@00000000 +37 01 02 00 EF 10 00 04 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 47 00 00 83 27 C7 E8 33 45 F5 00 13 05 D5 0A +23 26 A7 E8 67 80 00 00 83 47 05 00 63 82 07 02 +37 47 00 00 83 26 C7 E8 B3 C7 D7 00 93 87 97 20 +23 26 F7 E8 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FD 23 26 11 02 23 24 81 02 +23 22 91 02 23 20 21 03 23 2E 31 01 23 2C 41 01 +23 2A 51 01 23 28 61 01 23 26 71 01 23 24 81 01 +23 22 91 01 B7 17 00 00 93 87 87 2C 37 37 00 00 +13 07 07 BC 33 87 E7 00 93 06 00 7D 23 A0 D7 00 +93 87 47 00 E3 9C E7 FE B7 4A 00 00 93 8A 4A E8 +37 1A 00 00 13 0B FA AE 13 0A FA 5D 13 0C 00 00 +B7 2B 00 00 93 8B 0B 71 93 0C F0 FF 83 A7 4A 00 +13 94 27 00 33 04 F4 00 13 14 34 00 33 04 F4 40 +13 14 44 00 33 04 F4 00 13 14 44 00 93 05 0A 00 +13 05 04 00 EF 00 C0 1A 23 A2 AA 00 93 05 0A 00 +13 05 04 00 EF 00 80 11 13 04 05 00 93 09 0B 00 +13 09 EA FF 93 84 0A 00 93 85 09 00 13 05 04 00 +EF 00 80 0D 83 A7 04 00 13 94 27 00 33 04 F4 00 +13 14 34 00 33 04 F4 40 13 14 44 00 33 04 F4 00 +13 14 44 00 33 04 A4 00 93 05 09 00 13 05 04 00 +EF 00 00 15 23 A0 A4 00 93 05 09 00 13 05 04 00 +EF 00 C0 0B 13 04 05 00 93 89 F9 FF 93 84 C4 FF +13 09 E9 FF E3 92 09 FA 93 85 0B 00 EF 00 00 0A +33 05 85 01 EF F0 DF E8 93 85 0B 00 13 05 04 00 +EF 00 00 11 13 0C 05 00 13 0A 4A FE 13 0B 2B FF +93 8A 8A FC E3 14 9A F3 37 15 00 00 13 05 05 2C +EF F0 9F E7 93 05 D0 0F B7 47 00 00 03 A5 C7 E8 +EF 00 00 0E 83 20 C1 02 03 24 81 02 83 24 41 02 +03 29 01 02 83 29 C1 01 03 2A 81 01 83 2A 41 01 +03 2B 01 01 83 2B C1 00 03 2C 81 00 83 2C 41 00 +13 01 01 03 67 80 00 00 13 06 05 00 13 05 00 00 +93 F6 15 00 63 84 06 00 33 05 C5 00 93 D5 15 00 +13 16 16 00 E3 96 05 FE 67 80 00 00 63 40 05 06 +63 C6 05 06 13 86 05 00 93 05 05 00 13 05 F0 FF +63 0C 06 02 93 06 10 00 63 7A B6 00 63 58 C0 00 +13 16 16 00 93 96 16 00 E3 6A B6 FE 13 05 00 00 +63 E6 C5 00 B3 85 C5 40 33 65 D5 00 93 D6 16 00 +13 56 16 00 E3 96 06 FE 67 80 00 00 93 82 00 00 +EF F0 5F FB 13 85 05 00 67 80 02 00 33 05 A0 40 +63 D8 05 00 B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 +93 82 00 00 EF F0 1F F9 33 05 A0 40 67 80 02 00 +93 82 00 00 63 CA 05 00 63 4C 05 00 EF F0 9F F7 +13 85 05 00 67 80 02 00 B3 05 B0 40 E3 58 05 FE +33 05 A0 40 EF F0 1F F6 33 05 B0 40 67 80 02 00 +@000012C0 +0A 00 00 00 +@000012C4 +FD 00 00 00 diff --git a/test/testcases/pi.dump b/test/testcases/pi.dump new file mode 100644 index 0000000..1d2fafb --- /dev/null +++ b/test/testcases/pi.dump @@ -0,0 +1,594 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 040010ef jal ra,1044
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2c004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00004737 lui a4,0x4 + 1004: e8c72783 lw a5,-372(a4) # 3e8c <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: e8a72623 sw a0,-372(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00004737 lui a4,0x4 + 1024: e8c72683 lw a3,-372(a4) # 3e8c <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: e8f72623 sw a5,-372(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044
: + 1044: fd010113 addi sp,sp,-48 # 1ffd0 <__heap_start+0x1bfd0> + 1048: 02112623 sw ra,44(sp) + 104c: 02812423 sw s0,40(sp) + 1050: 02912223 sw s1,36(sp) + 1054: 03212023 sw s2,32(sp) + 1058: 01312e23 sw s3,28(sp) + 105c: 01412c23 sw s4,24(sp) + 1060: 01512a23 sw s5,20(sp) + 1064: 01612823 sw s6,16(sp) + 1068: 01712623 sw s7,12(sp) + 106c: 01812423 sw s8,8(sp) + 1070: 01912223 sw s9,4(sp) + 1074: 000017b7 lui a5,0x1 + 1078: 2c878793 addi a5,a5,712 # 12c8 <__bss_start> + 107c: 00003737 lui a4,0x3 + 1080: bc070713 addi a4,a4,-1088 # 2bc0 <__bss_start+0x18f8> + 1084: 00e78733 add a4,a5,a4 + 1088: 7d000693 li a3,2000 + 108c: 00d7a023 sw a3,0(a5) + 1090: 00478793 addi a5,a5,4 + 1094: fee79ce3 bne a5,a4,108c + 1098: 00004ab7 lui s5,0x4 + 109c: e84a8a93 addi s5,s5,-380 # 3e84 <__bss_start+0x2bbc> + 10a0: 00001a37 lui s4,0x1 + 10a4: aefa0b13 addi s6,s4,-1297 # aef + 10a8: 5dfa0a13 addi s4,s4,1503 + 10ac: 00000c13 li s8,0 + 10b0: 00002bb7 lui s7,0x2 + 10b4: 710b8b93 addi s7,s7,1808 # 2710 <__bss_start+0x1448> + 10b8: fff00c93 li s9,-1 + 10bc: 004aa783 lw a5,4(s5) + 10c0: 00279413 slli s0,a5,0x2 + 10c4: 00f40433 add s0,s0,a5 + 10c8: 00341413 slli s0,s0,0x3 + 10cc: 40f40433 sub s0,s0,a5 + 10d0: 00441413 slli s0,s0,0x4 + 10d4: 00f40433 add s0,s0,a5 + 10d8: 00441413 slli s0,s0,0x4 + 10dc: 000a0593 mv a1,s4 + 10e0: 00040513 mv a0,s0 + 10e4: 1ac000ef jal ra,1290 <__modsi3> + 10e8: 00aaa223 sw a0,4(s5) + 10ec: 000a0593 mv a1,s4 + 10f0: 00040513 mv a0,s0 + 10f4: 118000ef jal ra,120c <__divsi3> + 10f8: 00050413 mv s0,a0 + 10fc: 000b0993 mv s3,s6 + 1100: ffea0913 addi s2,s4,-2 + 1104: 000a8493 mv s1,s5 + 1108: 00098593 mv a1,s3 + 110c: 00040513 mv a0,s0 + 1110: 0d8000ef jal ra,11e8 <__mulsi3> + 1114: 0004a783 lw a5,0(s1) + 1118: 00279413 slli s0,a5,0x2 + 111c: 00f40433 add s0,s0,a5 + 1120: 00341413 slli s0,s0,0x3 + 1124: 40f40433 sub s0,s0,a5 + 1128: 00441413 slli s0,s0,0x4 + 112c: 00f40433 add s0,s0,a5 + 1130: 00441413 slli s0,s0,0x4 + 1134: 00a40433 add s0,s0,a0 + 1138: 00090593 mv a1,s2 + 113c: 00040513 mv a0,s0 + 1140: 150000ef jal ra,1290 <__modsi3> + 1144: 00a4a023 sw a0,0(s1) + 1148: 00090593 mv a1,s2 + 114c: 00040513 mv a0,s0 + 1150: 0bc000ef jal ra,120c <__divsi3> + 1154: 00050413 mv s0,a0 + 1158: fff98993 addi s3,s3,-1 + 115c: ffc48493 addi s1,s1,-4 + 1160: ffe90913 addi s2,s2,-2 + 1164: fa0992e3 bnez s3,1108 + 1168: 000b8593 mv a1,s7 + 116c: 0a0000ef jal ra,120c <__divsi3> + 1170: 01850533 add a0,a0,s8 + 1174: e8dff0ef jal ra,1000 + 1178: 000b8593 mv a1,s7 + 117c: 00040513 mv a0,s0 + 1180: 110000ef jal ra,1290 <__modsi3> + 1184: 00050c13 mv s8,a0 + 1188: fe4a0a13 addi s4,s4,-28 + 118c: ff2b0b13 addi s6,s6,-14 + 1190: fc8a8a93 addi s5,s5,-56 + 1194: f39a14e3 bne s4,s9,10bc + 1198: 00001537 lui a0,0x1 + 119c: 2c050513 addi a0,a0,704 # 12c0 <__modsi3+0x30> + 11a0: e79ff0ef jal ra,1018 + 11a4: 0fd00593 li a1,253 + 11a8: 000047b7 lui a5,0x4 + 11ac: e8c7a503 lw a0,-372(a5) # 3e8c <__bss_end> + 11b0: 0e0000ef jal ra,1290 <__modsi3> + 11b4: 02c12083 lw ra,44(sp) + 11b8: 02812403 lw s0,40(sp) + 11bc: 02412483 lw s1,36(sp) + 11c0: 02012903 lw s2,32(sp) + 11c4: 01c12983 lw s3,28(sp) + 11c8: 01812a03 lw s4,24(sp) + 11cc: 01412a83 lw s5,20(sp) + 11d0: 01012b03 lw s6,16(sp) + 11d4: 00c12b83 lw s7,12(sp) + 11d8: 00812c03 lw s8,8(sp) + 11dc: 00412c83 lw s9,4(sp) + 11e0: 03010113 addi sp,sp,48 + 11e4: 00008067 ret + +000011e8 <__mulsi3>: + 11e8: 00050613 mv a2,a0 + 11ec: 00000513 li a0,0 + 11f0: 0015f693 andi a3,a1,1 + 11f4: 00068463 beqz a3,11fc <__mulsi3+0x14> + 11f8: 00c50533 add a0,a0,a2 + 11fc: 0015d593 srli a1,a1,0x1 + 1200: 00161613 slli a2,a2,0x1 + 1204: fe0596e3 bnez a1,11f0 <__mulsi3+0x8> + 1208: 00008067 ret + +0000120c <__divsi3>: + 120c: 06054063 bltz a0,126c <__umodsi3+0x10> + 1210: 0605c663 bltz a1,127c <__umodsi3+0x20> + +00001214 <__udivsi3>: + 1214: 00058613 mv a2,a1 + 1218: 00050593 mv a1,a0 + 121c: fff00513 li a0,-1 + 1220: 02060c63 beqz a2,1258 <__udivsi3+0x44> + 1224: 00100693 li a3,1 + 1228: 00b67a63 bgeu a2,a1,123c <__udivsi3+0x28> + 122c: 00c05863 blez a2,123c <__udivsi3+0x28> + 1230: 00161613 slli a2,a2,0x1 + 1234: 00169693 slli a3,a3,0x1 + 1238: feb66ae3 bltu a2,a1,122c <__udivsi3+0x18> + 123c: 00000513 li a0,0 + 1240: 00c5e663 bltu a1,a2,124c <__udivsi3+0x38> + 1244: 40c585b3 sub a1,a1,a2 + 1248: 00d56533 or a0,a0,a3 + 124c: 0016d693 srli a3,a3,0x1 + 1250: 00165613 srli a2,a2,0x1 + 1254: fe0696e3 bnez a3,1240 <__udivsi3+0x2c> + 1258: 00008067 ret + +0000125c <__umodsi3>: + 125c: 00008293 mv t0,ra + 1260: fb5ff0ef jal ra,1214 <__udivsi3> + 1264: 00058513 mv a0,a1 + 1268: 00028067 jr t0 + 126c: 40a00533 neg a0,a0 + 1270: 0005d863 bgez a1,1280 <__umodsi3+0x24> + 1274: 40b005b3 neg a1,a1 + 1278: f9dff06f j 1214 <__udivsi3> + 127c: 40b005b3 neg a1,a1 + 1280: 00008293 mv t0,ra + 1284: f91ff0ef jal ra,1214 <__udivsi3> + 1288: 40a00533 neg a0,a0 + 128c: 00028067 jr t0 + +00001290 <__modsi3>: + 1290: 00008293 mv t0,ra + 1294: 0005ca63 bltz a1,12a8 <__modsi3+0x18> + 1298: 00054c63 bltz a0,12b0 <__modsi3+0x20> + 129c: f79ff0ef jal ra,1214 <__udivsi3> + 12a0: 00058513 mv a0,a1 + 12a4: 00028067 jr t0 + 12a8: 40b005b3 neg a1,a1 + 12ac: fe0558e3 bgez a0,129c <__modsi3+0xc> + 12b0: 40a00533 neg a0,a0 + 12b4: f61ff0ef jal ra,1214 <__udivsi3> + 12b8: 40b00533 neg a0,a1 + 12bc: 00028067 jr t0 + +Disassembly of section .rodata.str1.4: + +000012c0 <.rodata.str1.4>: + 12c0: 000a c.slli zero,0x2 + ... + +Disassembly of section .srodata: + +000012c4 : + 12c4: 00fd addi ra,ra,31 + ... + +Disassembly of section .bss: + +000012c8 : + ... + +Disassembly of section .sbss: + +00003e8c : + 3e8c: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 008e slli ra,ra,0x3 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0048 addi a0,sp,4 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x626ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6d00 flw fs0,24(a0) + 46: 6c75 lui s8,0x1d + 48: 6964 flw fs1,84(a0) + 4a: 00532e33 slt t3,t1,t0 + 4e: 0001 nop + 50: 0000 unimp + 52: 0500 addi s0,sp,640 + 54: e802 fsw ft0,16(sp) + 56: 0011 c.nop 4 + 58: 0300 addi s0,sp,384 + 5a: 0124 addi s1,sp,136 + 5c: 04090103 lb sp,64(s2) + 60: 0100 addi s0,sp,128 + 62: 04090203 lb tp,64(s2) + 66: 0100 addi s0,sp,128 + 68: 04090103 lb sp,64(s2) + 6c: 0100 addi s0,sp,128 + 6e: 04090103 lb sp,64(s2) + 72: 0100 addi s0,sp,128 + 74: 04090203 lb tp,64(s2) + 78: 0100 addi s0,sp,128 + 7a: 04090103 lb sp,64(s2) + 7e: 0100 addi s0,sp,128 + 80: 04090103 lb sp,64(s2) + 84: 0100 addi s0,sp,128 + 86: 04090103 lb sp,64(s2) + 8a: 0100 addi s0,sp,128 + 8c: 0409 addi s0,s0,2 + 8e: 0000 unimp + 90: 0101 addi sp,sp,0 + 92: 0164 addi s1,sp,140 + 94: 0000 unimp + 96: 0002 c.slli64 zero + 98: 0045 c.nop 17 + 9a: 0000 unimp + 9c: 0101 addi sp,sp,0 + 9e: 000d0efb 0xd0efb + a2: 0101 addi sp,sp,0 + a4: 0101 addi sp,sp,0 + a6: 0000 unimp + a8: 0100 addi s0,sp,128 + aa: 0000 unimp + ac: 2e01 jal 3bc + ae: 2f2e fld ft10,200(sp) + b0: 2e2e fld ft8,200(sp) + b2: 2f2e2e2f 0x2f2e2e2f + b6: 2f2e fld ft10,200(sp) + b8: 6972 flw fs2,28(sp) + ba: 2d766373 csrrsi t1,0x2d7,12 + be: 2f636367 0x2f636367 + c2: 696c flw fa1,84(a0) + c4: 6762 flw fa4,24(sp) + c6: 632f6363 bltu t5,s2,6ec + ca: 69666e6f jal t3,66760 <__heap_start+0x62760> + ce: 69722f67 0x69722f67 + d2: 00766373 csrrsi t1,0x7,12 + d6: 6400 flw fs0,8(s0) + d8: 7669 lui a2,0xffffa + da: 532e lw t1,232(sp) + dc: 0100 addi s0,sp,128 + de: 0000 unimp + e0: 0000 unimp + e2: 0205 addi tp,tp,1 + e4: 120c addi a1,sp,288 + e6: 0000 unimp + e8: 0100c403 lbu s0,16(ra) + ec: 04090103 lb sp,64(s2) + f0: 0100 addi s0,sp,128 + f2: 04090403 lb s0,64(s2) + f6: 0100 addi s0,sp,128 + f8: 04090103 lb sp,64(s2) + fc: 0100 addi s0,sp,128 + fe: 04090103 lb sp,64(s2) + 102: 0100 addi s0,sp,128 + 104: 04090103 lb sp,64(s2) + 108: 0100 addi s0,sp,128 + 10a: 04090103 lb sp,64(s2) + 10e: 0100 addi s0,sp,128 + 110: 04090103 lb sp,64(s2) + 114: 0100 addi s0,sp,128 + 116: 04090203 lb tp,64(s2) + 11a: 0100 addi s0,sp,128 + 11c: 04090103 lb sp,64(s2) + 120: 0100 addi s0,sp,128 + 122: 04090103 lb sp,64(s2) + 126: 0100 addi s0,sp,128 + 128: 04090103 lb sp,64(s2) + 12c: 0100 addi s0,sp,128 + 12e: 04090203 lb tp,64(s2) + 132: 0100 addi s0,sp,128 + 134: 04090203 lb tp,64(s2) + 138: 0100 addi s0,sp,128 + 13a: 04090103 lb sp,64(s2) + 13e: 0100 addi s0,sp,128 + 140: 04090103 lb sp,64(s2) + 144: 0100 addi s0,sp,128 + 146: 04090203 lb tp,64(s2) + 14a: 0100 addi s0,sp,128 + 14c: 04090103 lb sp,64(s2) + 150: 0100 addi s0,sp,128 + 152: 04090103 lb sp,64(s2) + 156: 0100 addi s0,sp,128 + 158: 04090203 lb tp,64(s2) + 15c: 0100 addi s0,sp,128 + 15e: 04090503 lb a0,64(s2) + 162: 0100 addi s0,sp,128 + 164: 04090103 lb sp,64(s2) + 168: 0100 addi s0,sp,128 + 16a: 04090103 lb sp,64(s2) + 16e: 0100 addi s0,sp,128 + 170: 04090103 lb sp,64(s2) + 174: 0100 addi s0,sp,128 + 176: 04090503 lb a0,64(s2) + 17a: 0100 addi s0,sp,128 + 17c: 04090103 lb sp,64(s2) + 180: 0100 addi s0,sp,128 + 182: 04090103 lb sp,64(s2) + 186: 0100 addi s0,sp,128 + 188: 04090103 lb sp,64(s2) + 18c: 0100 addi s0,sp,128 + 18e: 04090203 lb tp,64(s2) + 192: 0100 addi s0,sp,128 + 194: 04090203 lb tp,64(s2) + 198: 0100 addi s0,sp,128 + 19a: 04090103 lb sp,64(s2) + 19e: 0100 addi s0,sp,128 + 1a0: 04090103 lb sp,64(s2) + 1a4: 0100 addi s0,sp,128 + 1a6: 04090103 lb sp,64(s2) + 1aa: 0100 addi s0,sp,128 + 1ac: 04090403 lb s0,64(s2) + 1b0: 0100 addi s0,sp,128 + 1b2: 04090103 lb sp,64(s2) + 1b6: 0100 addi s0,sp,128 + 1b8: 04090103 lb sp,64(s2) + 1bc: 0100 addi s0,sp,128 + 1be: 04090203 lb tp,64(s2) + 1c2: 0100 addi s0,sp,128 + 1c4: 04090103 lb sp,64(s2) + 1c8: 0100 addi s0,sp,128 + 1ca: 04090103 lb sp,64(s2) + 1ce: 0100 addi s0,sp,128 + 1d0: 04090203 lb tp,64(s2) + 1d4: 0100 addi s0,sp,128 + 1d6: 04090103 lb sp,64(s2) + 1da: 0100 addi s0,sp,128 + 1dc: 04090203 lb tp,64(s2) + 1e0: 0100 addi s0,sp,128 + 1e2: 04090103 lb sp,64(s2) + 1e6: 0100 addi s0,sp,128 + 1e8: 04090103 lb sp,64(s2) + 1ec: 0100 addi s0,sp,128 + 1ee: 04090103 lb sp,64(s2) + 1f2: 0100 addi s0,sp,128 + 1f4: 0409 addi s0,s0,2 + 1f6: 0000 unimp + 1f8: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 11e8 addi a0,sp,236 + 12: 0000 unimp + 14: 120c addi a1,sp,288 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0032 c.slli zero,0xc + 1e: 0000 unimp + 20: 0000008b 0x8b + 24: 8001 c.srli64 s0 + 26: 0022 c.slli zero,0x8 + 28: 0000 unimp + 2a: 0002 c.slli64 zero + 2c: 0014 0x14 + 2e: 0000 unimp + 30: 0104 addi s1,sp,128 + 32: 0092 slli ra,ra,0x4 + 34: 0000 unimp + 36: 120c addi a1,sp,288 + 38: 0000 unimp + 3a: 12c0 addi s0,sp,356 + 3c: 0000 unimp + 3e: 0099 addi ra,ra,6 + 40: 0000 unimp + 42: 0032 c.slli zero,0xc + 44: 0000 unimp + 46: 0000008b 0x8b + 4a: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + 12: 0000 unimp + 14: 1101 addi sp,sp,-32 + 16: 1000 addi s0,sp,32 + 18: 1106 slli sp,sp,0x21 + 1a: 1201 addi tp,tp,-32 + 1c: 0301 addi t1,t1,0 + 1e: 1b0e slli s6,s6,0x23 + 20: 250e fld fa0,192(sp) + 22: 130e slli t1,t1,0x23 + 24: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 11e8 addi a0,sp,236 + 12: 0000 unimp + 14: 0024 addi s1,sp,8 + ... + 1e: 0000 unimp + 20: 001c 0x1c + 22: 0000 unimp + 24: 0002 c.slli64 zero + 26: 0026 c.slli zero,0x9 + 28: 0000 unimp + 2a: 0004 0x4 + 2c: 0000 unimp + 2e: 0000 unimp + 30: 120c addi a1,sp,288 + 32: 0000 unimp + 34: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 6d2f7663 bgeu t5,s2,6f2 + 2a: 6c75 lui s8,0x1d + 2c: 6964 flw fs1,84(a0) + 2e: 00532e33 slt t3,t1,t0 + 32: 6d6f682f 0x6d6f682f + 36: 2f65 jal 7ee + 38: 712d7577 0x712d7577 + 3c: 6e69 lui t3,0x1a + 3e: 35312d67 0x35312d67 + 42: 69722f37 lui t5,0x69722 + 46: 2d766373 csrrsi t1,0x2d7,12 + 4a: 2d756e67 0x2d756e67 + 4e: 6f74 flw fa3,92(a4) + 50: 68636c6f jal s8,366d6 <__heap_start+0x326d6> + 54: 6961 lui s2,0x18 + 56: 2f6e fld ft10,216(sp) + 58: 7562 flw fa0,56(sp) + 5a: 6c69 lui s8,0x1a + 5c: 2d64 fld fs1,216(a0) + 5e: 2d636367 0x2d636367 + 62: 656e flw fa0,216(sp) + 64: 62696c77 0x62696c77 + 68: 732d lui t1,0xfffeb + 6a: 6174 flw fa3,68(a0) + 6c: 2f326567 0x2f326567 + 70: 6972 flw fs2,28(sp) + 72: 33766373 csrrsi t1,mhpmevent23,12 + 76: 2d32 fld fs10,264(sp) + 78: 6e75 lui t3,0x1d + 7a: 776f6e6b 0x776f6e6b + 7e: 2d6e fld fs10,216(sp) + 80: 6c65 lui s8,0x19 + 82: 2f66 fld ft10,88(sp) + 84: 696c flw fa1,84(a0) + 86: 6762 flw fa4,24(sp) + 88: 47006363 bltu zero,a6,4ee + 8c: 554e lw a0,240(sp) + 8e: 4120 lw s0,64(a0) + 90: 2e322053 0x2e322053 + 94: 312e3133 0x312e3133 + 98: 2e00 fld fs0,24(a2) + 9a: 2f2e fld ft10,200(sp) + 9c: 2e2e fld ft8,200(sp) + 9e: 2f2e2e2f 0x2f2e2e2f + a2: 2f2e fld ft10,200(sp) + a4: 6972 flw fs2,28(sp) + a6: 2d766373 csrrsi t1,0x2d7,12 + aa: 2f636367 0x2f636367 + ae: 696c flw fa1,84(a0) + b0: 6762 flw fa4,24(sp) + b2: 632f6363 bltu t5,s2,6d8 + b6: 69666e6f jal t3,6674c <__heap_start+0x6274c> + ba: 69722f67 0x69722f67 + be: 2f766373 csrrsi t1,0x2f7,12 + c2: 6964 flw fs1,84(a0) + c4: 2e76 fld ft8,344(sp) + c6: fadd.s ft0,ft0,ft0,rne diff --git a/test/testcases/qsort.c b/test/testcases/qsort.c new file mode 100644 index 0000000..5a457aa --- /dev/null +++ b/test/testcases/qsort.c @@ -0,0 +1,44 @@ +#include "io.inc" +// Target: qsort +// Possible optimization: Dead code elimination, common expression, strength +// reduction REMARKS: nothing. + +int a[10100]; +int n = 10000; + +int qsrt(int l, int r) { + int i = l; + int j = r; + int x = a[(l + r) / 2]; + while (i <= j) { + while (a[i] < x) + i++; + while (a[j] > x) + j--; + if (i <= j) { + int temp = a[i]; + a[i] = a[j]; + a[j] = temp; + i++; + j--; + } + } + if (l < j) + qsrt(l, j); + if (i < r) + qsrt(i, r); + return 0; +} + +int main() { + int i; + for (i = 1; i <= n; i++) + a[i] = n + 1 - i; + qsrt(1, n); + for (i = 1; i <= n; i++) { + printInt(a[i]); + printStr(" "); + } + printStr("\n"); + return judgeResult % Mod; // 105 +} diff --git a/test/testcases/qsort.data b/test/testcases/qsort.data new file mode 100644 index 0000000..2fe28f8 --- /dev/null +++ b/test/testcases/qsort.data @@ -0,0 +1,55 @@ +@00000000 +37 01 02 00 EF 10 80 15 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 B7 00 00 83 27 07 0B 33 45 F5 00 13 05 D5 0A +23 28 A7 0A 67 80 00 00 83 47 05 00 63 82 07 02 +37 B7 00 00 83 26 07 0B B3 C7 D7 00 93 87 97 20 +23 28 F7 0A 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FF 23 26 11 00 23 24 81 00 +23 22 91 00 93 84 05 00 37 17 00 00 B3 06 B5 00 +93 D7 F6 01 B3 87 D7 00 93 D7 17 40 93 97 27 00 +13 07 07 2E B3 07 F7 00 83 A6 07 00 13 04 05 00 +37 18 00 00 13 08 08 2E B7 08 00 40 93 88 F8 FF +63 C0 85 06 93 17 24 00 B3 07 F8 00 03 A7 07 00 +93 07 14 00 93 97 27 00 B3 87 07 01 63 5E D7 06 +13 04 14 00 93 87 47 00 03 A7 C7 FF E3 4A D7 FE +93 97 25 00 B3 07 F8 00 03 A6 07 00 63 D0 C6 02 +B3 87 15 01 93 97 27 00 B3 87 07 01 93 85 F5 FF +93 87 C7 FF 03 A6 47 00 E3 CA C6 FE 63 D6 85 04 +63 40 B5 02 63 42 94 02 13 05 00 00 83 20 C1 00 +03 24 81 00 83 24 41 00 13 01 01 01 67 80 00 00 +EF F0 5F F3 6F F0 1F FE 93 85 04 00 13 05 04 00 +EF F0 5F F2 6F F0 5F FD 93 97 25 00 B3 07 F8 00 +03 A6 07 00 E3 CE C6 F8 93 17 24 00 B3 07 F8 00 +23 A0 C7 00 93 97 25 00 B3 07 F8 00 23 A0 E7 00 +13 04 14 00 93 85 F5 FF 6F F0 9F F3 13 01 01 FE +23 2E 11 00 23 2C 81 00 23 2A 91 00 23 28 21 01 +23 26 31 01 B7 17 00 00 83 A5 C7 2D 63 50 B0 02 +93 87 05 00 37 17 00 00 13 07 47 2E 23 20 F7 00 +93 87 F7 FF 13 07 47 00 E3 9A 07 FE 13 05 10 00 +EF F0 5F EA B7 17 00 00 83 A7 C7 2D 63 5C F0 02 +37 14 00 00 13 04 44 2E 93 04 10 00 B7 19 00 00 +37 19 00 00 03 25 04 00 EF F0 9F E3 13 85 09 2D +EF F0 9F E4 93 84 14 00 13 04 44 00 83 27 C9 2D +E3 D2 97 FE 37 15 00 00 13 05 45 2D EF F0 DF E2 +93 05 D0 0F B7 B7 00 00 03 A5 07 0B EF 00 40 0A +83 20 C1 01 03 24 81 01 83 24 41 01 03 29 01 01 +83 29 C1 00 13 01 01 02 67 80 00 00 63 40 05 06 +63 C6 05 06 13 86 05 00 93 05 05 00 13 05 F0 FF +63 0C 06 02 93 06 10 00 63 7A B6 00 63 58 C0 00 +13 16 16 00 93 96 16 00 E3 6A B6 FE 13 05 00 00 +63 E6 C5 00 B3 85 C5 40 33 65 D5 00 93 D6 16 00 +13 56 16 00 E3 96 06 FE 67 80 00 00 93 82 00 00 +EF F0 5F FB 13 85 05 00 67 80 02 00 33 05 A0 40 +63 D8 05 00 B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 +93 82 00 00 EF F0 1F F9 33 05 A0 40 67 80 02 00 +93 82 00 00 63 CA 05 00 63 4C 05 00 EF F0 9F F7 +13 85 05 00 67 80 02 00 B3 05 B0 40 E3 58 05 FE +33 05 A0 40 EF F0 1F F6 33 05 B0 40 67 80 02 00 +@000012D0 +20 00 00 00 0A 00 00 00 +@000012D8 +FD 00 00 00 +@000012DC +10 27 00 00 diff --git a/test/testcases/qsort.dump b/test/testcases/qsort.dump new file mode 100644 index 0000000..1d60457 --- /dev/null +++ b/test/testcases/qsort.dump @@ -0,0 +1,494 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 158010ef jal ra,115c
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x24004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 0000b737 lui a4,0xb + 1004: 0b072783 lw a5,176(a4) # b0b0 <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 0aa72823 sw a0,176(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 0000b737 lui a4,0xb + 1024: 0b072683 lw a3,176(a4) # b0b0 <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 0af72823 sw a5,176(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044 : + 1044: ff010113 addi sp,sp,-16 # 1fff0 <__heap_start+0x13ff0> + 1048: 00112623 sw ra,12(sp) + 104c: 00812423 sw s0,8(sp) + 1050: 00912223 sw s1,4(sp) + 1054: 00058493 mv s1,a1 + 1058: 00001737 lui a4,0x1 + 105c: 00b506b3 add a3,a0,a1 + 1060: 01f6d793 srli a5,a3,0x1f + 1064: 00d787b3 add a5,a5,a3 + 1068: 4017d793 srai a5,a5,0x1 + 106c: 00279793 slli a5,a5,0x2 + 1070: 2e070713 addi a4,a4,736 # 12e0 + 1074: 00f707b3 add a5,a4,a5 + 1078: 0007a683 lw a3,0(a5) + 107c: 00050413 mv s0,a0 + 1080: 00001837 lui a6,0x1 + 1084: 2e080813 addi a6,a6,736 # 12e0 + 1088: 400008b7 lui a7,0x40000 + 108c: fff88893 addi a7,a7,-1 # 3fffffff <__heap_start+0x3fff3fff> + 1090: 0685c063 blt a1,s0,10f0 + 1094: 00241793 slli a5,s0,0x2 + 1098: 00f807b3 add a5,a6,a5 + 109c: 0007a703 lw a4,0(a5) + 10a0: 00140793 addi a5,s0,1 + 10a4: 00279793 slli a5,a5,0x2 + 10a8: 010787b3 add a5,a5,a6 + 10ac: 06d75e63 bge a4,a3,1128 + 10b0: 00140413 addi s0,s0,1 + 10b4: 00478793 addi a5,a5,4 + 10b8: ffc7a703 lw a4,-4(a5) + 10bc: fed74ae3 blt a4,a3,10b0 + 10c0: 00259793 slli a5,a1,0x2 + 10c4: 00f807b3 add a5,a6,a5 + 10c8: 0007a603 lw a2,0(a5) + 10cc: 02c6d063 bge a3,a2,10ec + 10d0: 011587b3 add a5,a1,a7 + 10d4: 00279793 slli a5,a5,0x2 + 10d8: 010787b3 add a5,a5,a6 + 10dc: fff58593 addi a1,a1,-1 + 10e0: ffc78793 addi a5,a5,-4 + 10e4: 0047a603 lw a2,4(a5) + 10e8: fec6cae3 blt a3,a2,10dc + 10ec: 0485d663 bge a1,s0,1138 + 10f0: 02b54063 blt a0,a1,1110 + 10f4: 02944263 blt s0,s1,1118 + 10f8: 00000513 li a0,0 + 10fc: 00c12083 lw ra,12(sp) + 1100: 00812403 lw s0,8(sp) + 1104: 00412483 lw s1,4(sp) + 1108: 01010113 addi sp,sp,16 + 110c: 00008067 ret + 1110: f35ff0ef jal ra,1044 + 1114: fe1ff06f j 10f4 + 1118: 00048593 mv a1,s1 + 111c: 00040513 mv a0,s0 + 1120: f25ff0ef jal ra,1044 + 1124: fd5ff06f j 10f8 + 1128: 00259793 slli a5,a1,0x2 + 112c: 00f807b3 add a5,a6,a5 + 1130: 0007a603 lw a2,0(a5) + 1134: f8c6cee3 blt a3,a2,10d0 + 1138: 00241793 slli a5,s0,0x2 + 113c: 00f807b3 add a5,a6,a5 + 1140: 00c7a023 sw a2,0(a5) + 1144: 00259793 slli a5,a1,0x2 + 1148: 00f807b3 add a5,a6,a5 + 114c: 00e7a023 sw a4,0(a5) + 1150: 00140413 addi s0,s0,1 + 1154: fff58593 addi a1,a1,-1 + 1158: f39ff06f j 1090 + +0000115c
: + 115c: fe010113 addi sp,sp,-32 + 1160: 00112e23 sw ra,28(sp) + 1164: 00812c23 sw s0,24(sp) + 1168: 00912a23 sw s1,20(sp) + 116c: 01212823 sw s2,16(sp) + 1170: 01312623 sw s3,12(sp) + 1174: 000017b7 lui a5,0x1 + 1178: 2dc7a583 lw a1,732(a5) # 12dc <__bss_start> + 117c: 02b05063 blez a1,119c + 1180: 00058793 mv a5,a1 + 1184: 00001737 lui a4,0x1 + 1188: 2e470713 addi a4,a4,740 # 12e4 + 118c: 00f72023 sw a5,0(a4) + 1190: fff78793 addi a5,a5,-1 + 1194: 00470713 addi a4,a4,4 + 1198: fe079ae3 bnez a5,118c + 119c: 00100513 li a0,1 + 11a0: ea5ff0ef jal ra,1044 + 11a4: 000017b7 lui a5,0x1 + 11a8: 2dc7a783 lw a5,732(a5) # 12dc <__bss_start> + 11ac: 02f05c63 blez a5,11e4 + 11b0: 00001437 lui s0,0x1 + 11b4: 2e440413 addi s0,s0,740 # 12e4 + 11b8: 00100493 li s1,1 + 11bc: 000019b7 lui s3,0x1 + 11c0: 00001937 lui s2,0x1 + 11c4: 00042503 lw a0,0(s0) + 11c8: e39ff0ef jal ra,1000 + 11cc: 2d098513 addi a0,s3,720 # 12d0 <__modsi3+0x30> + 11d0: e49ff0ef jal ra,1018 + 11d4: 00148493 addi s1,s1,1 + 11d8: 00440413 addi s0,s0,4 + 11dc: 2dc92783 lw a5,732(s2) # 12dc <__bss_start> + 11e0: fe97d2e3 bge a5,s1,11c4 + 11e4: 00001537 lui a0,0x1 + 11e8: 2d450513 addi a0,a0,724 # 12d4 <__modsi3+0x34> + 11ec: e2dff0ef jal ra,1018 + 11f0: 0fd00593 li a1,253 + 11f4: 0000b7b7 lui a5,0xb + 11f8: 0b07a503 lw a0,176(a5) # b0b0 <__bss_end> + 11fc: 0a4000ef jal ra,12a0 <__modsi3> + 1200: 01c12083 lw ra,28(sp) + 1204: 01812403 lw s0,24(sp) + 1208: 01412483 lw s1,20(sp) + 120c: 01012903 lw s2,16(sp) + 1210: 00c12983 lw s3,12(sp) + 1214: 02010113 addi sp,sp,32 + 1218: 00008067 ret + +0000121c <__divsi3>: + 121c: 06054063 bltz a0,127c <__umodsi3+0x10> + 1220: 0605c663 bltz a1,128c <__umodsi3+0x20> + +00001224 <__udivsi3>: + 1224: 00058613 mv a2,a1 + 1228: 00050593 mv a1,a0 + 122c: fff00513 li a0,-1 + 1230: 02060c63 beqz a2,1268 <__udivsi3+0x44> + 1234: 00100693 li a3,1 + 1238: 00b67a63 bgeu a2,a1,124c <__udivsi3+0x28> + 123c: 00c05863 blez a2,124c <__udivsi3+0x28> + 1240: 00161613 slli a2,a2,0x1 + 1244: 00169693 slli a3,a3,0x1 + 1248: feb66ae3 bltu a2,a1,123c <__udivsi3+0x18> + 124c: 00000513 li a0,0 + 1250: 00c5e663 bltu a1,a2,125c <__udivsi3+0x38> + 1254: 40c585b3 sub a1,a1,a2 + 1258: 00d56533 or a0,a0,a3 + 125c: 0016d693 srli a3,a3,0x1 + 1260: 00165613 srli a2,a2,0x1 + 1264: fe0696e3 bnez a3,1250 <__udivsi3+0x2c> + 1268: 00008067 ret + +0000126c <__umodsi3>: + 126c: 00008293 mv t0,ra + 1270: fb5ff0ef jal ra,1224 <__udivsi3> + 1274: 00058513 mv a0,a1 + 1278: 00028067 jr t0 + 127c: 40a00533 neg a0,a0 + 1280: 0005d863 bgez a1,1290 <__umodsi3+0x24> + 1284: 40b005b3 neg a1,a1 + 1288: f9dff06f j 1224 <__udivsi3> + 128c: 40b005b3 neg a1,a1 + 1290: 00008293 mv t0,ra + 1294: f91ff0ef jal ra,1224 <__udivsi3> + 1298: 40a00533 neg a0,a0 + 129c: 00028067 jr t0 + +000012a0 <__modsi3>: + 12a0: 00008293 mv t0,ra + 12a4: 0005ca63 bltz a1,12b8 <__modsi3+0x18> + 12a8: 00054c63 bltz a0,12c0 <__modsi3+0x20> + 12ac: f79ff0ef jal ra,1224 <__udivsi3> + 12b0: 00058513 mv a0,a1 + 12b4: 00028067 jr t0 + 12b8: 40b005b3 neg a1,a1 + 12bc: fe0558e3 bgez a0,12ac <__modsi3+0xc> + 12c0: 40a00533 neg a0,a0 + 12c4: f61ff0ef jal ra,1224 <__udivsi3> + 12c8: 40b00533 neg a0,a1 + 12cc: 00028067 jr t0 + +Disassembly of section .rodata.str1.4: + +000012d0 <.rodata.str1.4>: + 12d0: 0020 addi s0,sp,8 + 12d2: 0000 unimp + 12d4: 000a c.slli zero,0x2 + ... + +Disassembly of section .srodata: + +000012d8 : + 12d8: 00fd addi ra,ra,31 + ... + +Disassembly of section .sdata: + +000012dc : + 12dc: 2710 fld fa2,8(a4) + ... + +Disassembly of section .bss: + +000012e0 : + ... + +Disassembly of section .sbss: + +0000b0b0 : + b0b0: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x5a6ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 121c addi a5,sp,288 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 121c addi a5,sp,288 + 12: 0000 unimp + 14: 12d0 addi a2,sp,356 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 121c addi a5,sp,288 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffff3c66> + 3e: 3735 jal ffffff6a <__heap_start+0xffff3f6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xba682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffff3a12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/queens.c b/test/testcases/queens.c new file mode 100644 index 0000000..62150e0 --- /dev/null +++ b/test/testcases/queens.c @@ -0,0 +1,42 @@ +#include "io.inc" + +int N = 8; +int row[8]; +int col[8]; +int d[2][16]; + +void printBoard() { + int i; + int j; + for (i = 0; i < N; i++) { + for (j = 0; j < N; j++) { + if (col[i] == j) + printStr(" O"); + else + printStr(" ."); + } + printStr("\n"); + } + printStr("\n"); +} + +void search(int c) { + if (c == N) { + printBoard(); + } else { + int r; + for (r = 0; r < N; r++) { + if (row[r] == 0 && d[0][r + c] == 0 && d[1][r + N - 1 - c] == 0) { + row[r] = d[0][r + c] = d[1][r + N - 1 - c] = 1; + col[c] = r; + search(c + 1); + row[r] = d[0][r + c] = d[1][r + N - 1 - c] = 0; + } + } + } +} + +int main() { + search(0); + return judgeResult % Mod; // 171 +} diff --git a/test/testcases/queens.data b/test/testcases/queens.data new file mode 100644 index 0000000..e09e2c9 --- /dev/null +++ b/test/testcases/queens.data @@ -0,0 +1,63 @@ +@00000000 +37 01 02 00 EF 10 40 26 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 C7 41 33 45 F5 00 13 05 D5 0A +23 2E A7 40 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 C7 41 B3 C7 D7 00 93 87 97 20 +23 2E F7 40 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FE 23 2E 11 00 23 2C 81 00 +23 2A 91 00 23 28 21 01 23 26 31 01 23 24 41 01 +23 22 51 01 23 20 61 01 B7 17 00 00 83 A7 87 35 +63 5A F0 06 B7 14 00 00 93 84 C4 35 13 0A 00 00 +37 19 00 00 B7 19 00 00 B7 1A 00 00 37 1B 00 00 +6F 00 40 04 13 85 C9 34 EF F0 1F F8 13 04 14 00 +83 27 89 35 63 5C F4 00 83 A7 04 00 E3 94 87 FE +13 85 8A 34 EF F0 5F F6 6F F0 5F FE 13 05 0B 35 +EF F0 9F F5 13 0A 1A 00 93 84 44 00 83 27 89 35 +63 5A FA 00 83 27 89 35 13 04 00 00 E3 46 F0 FC +6F F0 DF FD 37 15 00 00 13 05 05 35 EF F0 DF F2 +83 20 C1 01 03 24 81 01 83 24 41 01 03 29 01 01 +83 29 C1 00 03 2A 81 00 83 2A 41 00 03 2B 01 00 +13 01 01 02 67 80 00 00 13 01 01 FD 23 26 11 02 +23 24 81 02 23 22 91 02 23 20 21 03 23 2E 31 01 +23 2C 41 01 23 2A 51 01 23 28 61 01 23 26 71 01 +23 24 81 01 23 22 91 01 B7 17 00 00 83 A7 87 35 +63 86 A7 04 93 09 05 00 63 54 F0 04 37 14 00 00 +13 04 C4 3F 93 14 25 00 37 17 00 00 13 07 C7 37 +B3 84 E4 00 13 09 00 00 B7 1B 00 00 93 8B CB 37 +B7 1A 00 00 93 8A CA 35 13 17 25 00 B3 8A EA 00 +93 0C 15 00 37 1A 00 00 6F 00 00 05 EF F0 9F EA +83 20 C1 02 03 24 81 02 83 24 41 02 03 29 01 02 +83 29 C1 01 03 2A 81 01 83 2A 41 01 03 2B 01 01 +83 2B C1 00 03 2C 81 00 83 2C 41 00 13 01 01 03 +67 80 00 00 13 09 19 00 83 27 8A 35 13 04 44 00 +93 84 44 00 E3 5E F9 FA 03 27 04 00 E3 14 07 FE +03 A7 04 00 E3 10 07 FE B3 87 27 01 93 87 F7 FF +B3 87 37 41 13 87 07 01 13 17 27 00 33 87 EB 00 +03 27 07 00 E3 10 07 FC 93 87 07 01 93 97 27 00 +B3 87 FB 00 13 07 10 00 23 A0 E7 00 23 A0 E4 00 +23 20 E4 00 23 A0 2A 01 13 85 0C 00 EF F0 DF ED +83 27 8A 35 B3 07 F9 00 B3 87 37 41 93 87 F7 00 +93 97 27 00 B3 87 FB 00 23 A0 07 00 23 A0 04 00 +23 20 04 00 6F F0 1F F7 13 01 01 FF 23 26 11 00 +13 05 00 00 EF F0 5F EA 93 05 D0 0F B7 17 00 00 +03 A5 C7 41 EF 00 40 09 83 20 C1 00 13 01 01 01 +67 80 00 00 63 40 05 06 63 C6 05 06 13 86 05 00 +93 05 05 00 13 05 F0 FF 63 0C 06 02 93 06 10 00 +63 7A B6 00 63 58 C0 00 13 16 16 00 93 96 16 00 +E3 6A B6 FE 13 05 00 00 63 E6 C5 00 B3 85 C5 40 +33 65 D5 00 93 D6 16 00 13 56 16 00 E3 96 06 FE +67 80 00 00 93 82 00 00 EF F0 5F FB 13 85 05 00 +67 80 02 00 33 05 A0 40 63 D8 05 00 B3 05 B0 40 +6F F0 DF F9 B3 05 B0 40 93 82 00 00 EF F0 1F F9 +33 05 A0 40 67 80 02 00 93 82 00 00 63 CA 05 00 +63 4C 05 00 EF F0 9F F7 13 85 05 00 67 80 02 00 +B3 05 B0 40 E3 58 05 FE 33 05 A0 40 EF F0 1F F6 +33 05 B0 40 67 80 02 00 +@00001348 +20 4F 00 00 20 2E 00 00 0A 00 00 00 +@00001354 +FD 00 00 00 +@00001358 +08 00 00 00 diff --git a/test/testcases/queens.dump b/test/testcases/queens.dump new file mode 100644 index 0000000..8fe216b --- /dev/null +++ b/test/testcases/queens.dump @@ -0,0 +1,534 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 264010ef jal ra,1268
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 41c72783 lw a5,1052(a4) # 141c <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 40a72e23 sw a0,1052(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 41c72683 lw a3,1052(a4) # 141c <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 40f72e23 sw a5,1052(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044 : + 1044: fe010113 addi sp,sp,-32 # 1ffe0 <__heap_start+0x1dfe0> + 1048: 00112e23 sw ra,28(sp) + 104c: 00812c23 sw s0,24(sp) + 1050: 00912a23 sw s1,20(sp) + 1054: 01212823 sw s2,16(sp) + 1058: 01312623 sw s3,12(sp) + 105c: 01412423 sw s4,8(sp) + 1060: 01512223 sw s5,4(sp) + 1064: 01612023 sw s6,0(sp) + 1068: 000017b7 lui a5,0x1 + 106c: 3587a783 lw a5,856(a5) # 1358 <__bss_start> + 1070: 06f05a63 blez a5,10e4 + 1074: 000014b7 lui s1,0x1 + 1078: 35c48493 addi s1,s1,860 # 135c + 107c: 00000a13 li s4,0 + 1080: 00001937 lui s2,0x1 + 1084: 000019b7 lui s3,0x1 + 1088: 00001ab7 lui s5,0x1 + 108c: 00001b37 lui s6,0x1 + 1090: 0440006f j 10d4 + 1094: 34c98513 addi a0,s3,844 # 134c <__modsi3+0x34> + 1098: f81ff0ef jal ra,1018 + 109c: 00140413 addi s0,s0,1 + 10a0: 35892783 lw a5,856(s2) # 1358 <__bss_start> + 10a4: 00f45c63 bge s0,a5,10bc + 10a8: 0004a783 lw a5,0(s1) + 10ac: fe8794e3 bne a5,s0,1094 + 10b0: 348a8513 addi a0,s5,840 # 1348 <__modsi3+0x30> + 10b4: f65ff0ef jal ra,1018 + 10b8: fe5ff06f j 109c + 10bc: 350b0513 addi a0,s6,848 # 1350 <__modsi3+0x38> + 10c0: f59ff0ef jal ra,1018 + 10c4: 001a0a13 addi s4,s4,1 + 10c8: 00448493 addi s1,s1,4 + 10cc: 35892783 lw a5,856(s2) + 10d0: 00fa5a63 bge s4,a5,10e4 + 10d4: 35892783 lw a5,856(s2) + 10d8: 00000413 li s0,0 + 10dc: fcf046e3 bgtz a5,10a8 + 10e0: fddff06f j 10bc + 10e4: 00001537 lui a0,0x1 + 10e8: 35050513 addi a0,a0,848 # 1350 <__modsi3+0x38> + 10ec: f2dff0ef jal ra,1018 + 10f0: 01c12083 lw ra,28(sp) + 10f4: 01812403 lw s0,24(sp) + 10f8: 01412483 lw s1,20(sp) + 10fc: 01012903 lw s2,16(sp) + 1100: 00c12983 lw s3,12(sp) + 1104: 00812a03 lw s4,8(sp) + 1108: 00412a83 lw s5,4(sp) + 110c: 00012b03 lw s6,0(sp) + 1110: 02010113 addi sp,sp,32 + 1114: 00008067 ret + +00001118 : + 1118: fd010113 addi sp,sp,-48 + 111c: 02112623 sw ra,44(sp) + 1120: 02812423 sw s0,40(sp) + 1124: 02912223 sw s1,36(sp) + 1128: 03212023 sw s2,32(sp) + 112c: 01312e23 sw s3,28(sp) + 1130: 01412c23 sw s4,24(sp) + 1134: 01512a23 sw s5,20(sp) + 1138: 01612823 sw s6,16(sp) + 113c: 01712623 sw s7,12(sp) + 1140: 01812423 sw s8,8(sp) + 1144: 01912223 sw s9,4(sp) + 1148: 000017b7 lui a5,0x1 + 114c: 3587a783 lw a5,856(a5) # 1358 <__bss_start> + 1150: 04a78663 beq a5,a0,119c + 1154: 00050993 mv s3,a0 + 1158: 04f05463 blez a5,11a0 + 115c: 00001437 lui s0,0x1 + 1160: 3fc40413 addi s0,s0,1020 # 13fc + 1164: 00251493 slli s1,a0,0x2 + 1168: 00001737 lui a4,0x1 + 116c: 37c70713 addi a4,a4,892 # 137c + 1170: 00e484b3 add s1,s1,a4 + 1174: 00000913 li s2,0 + 1178: 00001bb7 lui s7,0x1 + 117c: 37cb8b93 addi s7,s7,892 # 137c + 1180: 00001ab7 lui s5,0x1 + 1184: 35ca8a93 addi s5,s5,860 # 135c + 1188: 00251713 slli a4,a0,0x2 + 118c: 00ea8ab3 add s5,s5,a4 + 1190: 00150c93 addi s9,a0,1 + 1194: 00001a37 lui s4,0x1 + 1198: 0500006f j 11e8 + 119c: ea9ff0ef jal ra,1044 + 11a0: 02c12083 lw ra,44(sp) + 11a4: 02812403 lw s0,40(sp) + 11a8: 02412483 lw s1,36(sp) + 11ac: 02012903 lw s2,32(sp) + 11b0: 01c12983 lw s3,28(sp) + 11b4: 01812a03 lw s4,24(sp) + 11b8: 01412a83 lw s5,20(sp) + 11bc: 01012b03 lw s6,16(sp) + 11c0: 00c12b83 lw s7,12(sp) + 11c4: 00812c03 lw s8,8(sp) + 11c8: 00412c83 lw s9,4(sp) + 11cc: 03010113 addi sp,sp,48 + 11d0: 00008067 ret + 11d4: 00190913 addi s2,s2,1 + 11d8: 358a2783 lw a5,856(s4) # 1358 <__bss_start> + 11dc: 00440413 addi s0,s0,4 + 11e0: 00448493 addi s1,s1,4 + 11e4: faf95ee3 bge s2,a5,11a0 + 11e8: 00042703 lw a4,0(s0) + 11ec: fe0714e3 bnez a4,11d4 + 11f0: 0004a703 lw a4,0(s1) + 11f4: fe0710e3 bnez a4,11d4 + 11f8: 012787b3 add a5,a5,s2 + 11fc: fff78793 addi a5,a5,-1 + 1200: 413787b3 sub a5,a5,s3 + 1204: 01078713 addi a4,a5,16 + 1208: 00271713 slli a4,a4,0x2 + 120c: 00eb8733 add a4,s7,a4 + 1210: 00072703 lw a4,0(a4) + 1214: fc0710e3 bnez a4,11d4 + 1218: 01078793 addi a5,a5,16 + 121c: 00279793 slli a5,a5,0x2 + 1220: 00fb87b3 add a5,s7,a5 + 1224: 00100713 li a4,1 + 1228: 00e7a023 sw a4,0(a5) + 122c: 00e4a023 sw a4,0(s1) + 1230: 00e42023 sw a4,0(s0) + 1234: 012aa023 sw s2,0(s5) + 1238: 000c8513 mv a0,s9 + 123c: eddff0ef jal ra,1118 + 1240: 358a2783 lw a5,856(s4) + 1244: 00f907b3 add a5,s2,a5 + 1248: 413787b3 sub a5,a5,s3 + 124c: 00f78793 addi a5,a5,15 + 1250: 00279793 slli a5,a5,0x2 + 1254: 00fb87b3 add a5,s7,a5 + 1258: 0007a023 sw zero,0(a5) + 125c: 0004a023 sw zero,0(s1) + 1260: 00042023 sw zero,0(s0) + 1264: f71ff06f j 11d4 + +00001268
: + 1268: ff010113 addi sp,sp,-16 + 126c: 00112623 sw ra,12(sp) + 1270: 00000513 li a0,0 + 1274: ea5ff0ef jal ra,1118 + 1278: 0fd00593 li a1,253 + 127c: 000017b7 lui a5,0x1 + 1280: 41c7a503 lw a0,1052(a5) # 141c <__bss_end> + 1284: 094000ef jal ra,1318 <__modsi3> + 1288: 00c12083 lw ra,12(sp) + 128c: 01010113 addi sp,sp,16 + 1290: 00008067 ret + +00001294 <__divsi3>: + 1294: 06054063 bltz a0,12f4 <__umodsi3+0x10> + 1298: 0605c663 bltz a1,1304 <__umodsi3+0x20> + +0000129c <__udivsi3>: + 129c: 00058613 mv a2,a1 + 12a0: 00050593 mv a1,a0 + 12a4: fff00513 li a0,-1 + 12a8: 02060c63 beqz a2,12e0 <__udivsi3+0x44> + 12ac: 00100693 li a3,1 + 12b0: 00b67a63 bgeu a2,a1,12c4 <__udivsi3+0x28> + 12b4: 00c05863 blez a2,12c4 <__udivsi3+0x28> + 12b8: 00161613 slli a2,a2,0x1 + 12bc: 00169693 slli a3,a3,0x1 + 12c0: feb66ae3 bltu a2,a1,12b4 <__udivsi3+0x18> + 12c4: 00000513 li a0,0 + 12c8: 00c5e663 bltu a1,a2,12d4 <__udivsi3+0x38> + 12cc: 40c585b3 sub a1,a1,a2 + 12d0: 00d56533 or a0,a0,a3 + 12d4: 0016d693 srli a3,a3,0x1 + 12d8: 00165613 srli a2,a2,0x1 + 12dc: fe0696e3 bnez a3,12c8 <__udivsi3+0x2c> + 12e0: 00008067 ret + +000012e4 <__umodsi3>: + 12e4: 00008293 mv t0,ra + 12e8: fb5ff0ef jal ra,129c <__udivsi3> + 12ec: 00058513 mv a0,a1 + 12f0: 00028067 jr t0 + 12f4: 40a00533 neg a0,a0 + 12f8: 0005d863 bgez a1,1308 <__umodsi3+0x24> + 12fc: 40b005b3 neg a1,a1 + 1300: f9dff06f j 129c <__udivsi3> + 1304: 40b005b3 neg a1,a1 + 1308: 00008293 mv t0,ra + 130c: f91ff0ef jal ra,129c <__udivsi3> + 1310: 40a00533 neg a0,a0 + 1314: 00028067 jr t0 + +00001318 <__modsi3>: + 1318: 00008293 mv t0,ra + 131c: 0005ca63 bltz a1,1330 <__modsi3+0x18> + 1320: 00054c63 bltz a0,1338 <__modsi3+0x20> + 1324: f79ff0ef jal ra,129c <__udivsi3> + 1328: 00058513 mv a0,a1 + 132c: 00028067 jr t0 + 1330: 40b005b3 neg a1,a1 + 1334: fe0558e3 bgez a0,1324 <__modsi3+0xc> + 1338: 40a00533 neg a0,a0 + 133c: f61ff0ef jal ra,129c <__udivsi3> + 1340: 40b00533 neg a0,a1 + 1344: 00028067 jr t0 + +Disassembly of section .rodata.str1.4: + +00001348 <.rodata.str1.4>: + 1348: 4f20 lw s0,88(a4) + 134a: 0000 unimp + 134c: 2e20 fld fs0,88(a2) + 134e: 0000 unimp + 1350: 000a c.slli zero,0x2 + ... + +Disassembly of section .srodata: + +00001354 : + 1354: 00fd addi ra,ra,31 + ... + +Disassembly of section .sdata: + +00001358 : + 1358: 0008 0x8 + ... + +Disassembly of section .bss: + +0000135c : + ... + +0000137c : + ... + +000013fc : + ... + +Disassembly of section .sbss: + +0000141c : + 141c: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 1294 addi a3,sp,352 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 1294 addi a3,sp,352 + 12: 0000 unimp + 14: 1348 addi a0,sp,420 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 1294 addi a3,sp,352 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/statement_test.c b/test/testcases/statement_test.c new file mode 100644 index 0000000..c9f3c7d --- /dev/null +++ b/test/testcases/statement_test.c @@ -0,0 +1,52 @@ +#include "io.inc" +//考察点:section 8 语句,包括if,while,for,break,continue,return等 +//算法:线性筛法求欧拉函数 +//样例输入:10 +//样例输出: +// 1 +// 2 +// 2 +// 4 +// 2 +// 6 +// 4 +// 6 +// 4 + +int N; +int M = 0; +int check[20]; + +int main() { + N = 10; + int i = 0; + while (i <= N) + check[i++] = 1; + int phi[15]; + int P[15]; + phi[1] = 1; + for (i = 2;; ++i) { + if (i > N) + break; + if (check[i]) { + P[++M] = i; + phi[i] = i - 1; + } + int k = i; + int i; + for (i = 1; i <= M && (k * P[i] <= N); i++) { + int tmp = k * P[i]; + if (tmp > N) + continue; + check[tmp] = 0; + if (k % P[i] == 0) { + phi[tmp] = phi[k] * P[i]; + break; + } else { + phi[k * P[i]] = phi[k] * (P[i] - 1); + } + } + printInt(phi[k]); + } + return judgeResult % Mod; // 50 +} diff --git a/test/testcases/statement_test.data b/test/testcases/statement_test.data new file mode 100644 index 0000000..5d320e2 --- /dev/null +++ b/test/testcases/statement_test.data @@ -0,0 +1,54 @@ +@00000000 +37 01 02 00 EF 10 00 04 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 C7 35 33 45 F5 00 13 05 D5 0A +23 2E A7 34 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 C7 35 B3 C7 D7 00 93 87 97 20 +23 2E F7 34 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 F4 23 2E 11 0A 23 2C 81 0A +23 2A 91 0A 23 28 21 0B 23 26 31 0B 23 24 41 0B +23 22 51 0B 23 20 61 0B 23 2E 71 09 23 2C 81 09 +23 2A 91 09 23 28 A1 09 23 26 B1 09 B7 17 00 00 +13 07 A0 00 23 A2 E7 30 B7 17 00 00 93 87 87 30 +93 86 C7 02 13 07 10 00 23 A0 E7 00 93 87 47 00 +E3 9C D7 FE 93 07 10 00 23 24 F1 04 B7 1C 00 00 +93 8C 0C 31 93 0A C1 04 13 0A 20 00 13 0B A0 00 +37 1D 00 00 37 1C 00 00 13 0C 8C 30 B7 1D 00 00 +6F 00 C0 03 13 14 24 00 93 07 01 08 33 84 87 00 +93 85 04 00 03 A5 0A 00 EF 00 00 14 23 22 A4 FC +03 A5 0A 00 EF F0 DF F0 13 0A 1A 00 03 AB 4D 30 +93 8C 4C 00 93 8A 4A 00 63 4A 4B 0D 83 A7 0C 00 +63 84 07 02 83 27 8D 35 93 87 17 00 23 2C FD 34 +93 97 27 00 13 07 01 08 B3 07 F7 00 23 A4 47 F9 +93 07 FA FF 23 A0 FA 00 83 2B 8D 35 E3 5A 70 FB +83 24 C1 00 93 05 0A 00 13 85 04 00 EF 00 C0 0D +13 04 05 00 E3 4E AB F8 93 17 25 00 B3 07 FC 00 +23 A0 07 00 93 85 04 00 13 05 0A 00 EF 00 40 16 +93 09 01 01 13 09 10 00 E3 0E 05 F4 13 14 24 00 +93 07 01 08 33 84 87 00 93 85 F4 FF 03 A5 0A 00 +EF 00 80 09 23 22 A4 FC 13 09 19 00 E3 CA 2B F5 +83 A4 09 00 93 05 0A 00 13 85 04 00 EF 00 C0 07 +13 04 05 00 E3 4E AB F2 93 17 24 00 B3 07 FC 00 +23 A0 07 00 93 89 49 00 93 85 04 00 13 05 0A 00 +EF 00 00 10 E3 14 05 FA 6F F0 DF EF 93 05 D0 0F +B7 17 00 00 03 A5 C7 35 EF 00 80 0E 83 20 C1 0B +03 24 81 0B 83 24 41 0B 03 29 01 0B 83 29 C1 0A +03 2A 81 0A 83 2A 41 0A 03 2B 01 0A 83 2B C1 09 +03 2C 81 09 83 2C 41 09 03 2D 01 09 83 2D C1 08 +13 01 01 0C 67 80 00 00 13 06 05 00 13 05 00 00 +93 F6 15 00 63 84 06 00 33 05 C5 00 93 D5 15 00 +13 16 16 00 E3 96 05 FE 67 80 00 00 63 40 05 06 +63 C6 05 06 13 86 05 00 93 05 05 00 13 05 F0 FF +63 0C 06 02 93 06 10 00 63 7A B6 00 63 58 C0 00 +13 16 16 00 93 96 16 00 E3 6A B6 FE 13 05 00 00 +63 E6 C5 00 B3 85 C5 40 33 65 D5 00 93 D6 16 00 +13 56 16 00 E3 96 06 FE 67 80 00 00 93 82 00 00 +EF F0 5F FB 13 85 05 00 67 80 02 00 33 05 A0 40 +63 D8 05 00 B3 05 B0 40 6F F0 DF F9 B3 05 B0 40 +93 82 00 00 EF F0 1F F9 33 05 A0 40 67 80 02 00 +93 82 00 00 63 CA 05 00 63 4C 05 00 EF F0 9F F7 +13 85 05 00 67 80 02 00 B3 05 B0 40 E3 58 05 FE +33 05 A0 40 EF F0 1F F6 33 05 B0 40 67 80 02 00 +@00001300 +FD 00 00 00 diff --git a/test/testcases/statement_test.dump b/test/testcases/statement_test.dump new file mode 100644 index 0000000..d501d61 --- /dev/null +++ b/test/testcases/statement_test.dump @@ -0,0 +1,612 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 040010ef jal ra,1044
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 35c72783 lw a5,860(a4) # 135c + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 34a72e23 sw a0,860(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 35c72683 lw a3,860(a4) # 135c + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 34f72e23 sw a5,860(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044
: + 1044: f4010113 addi sp,sp,-192 # 1ff40 <__heap_start+0x1df40> + 1048: 0a112e23 sw ra,188(sp) + 104c: 0a812c23 sw s0,184(sp) + 1050: 0a912a23 sw s1,180(sp) + 1054: 0b212823 sw s2,176(sp) + 1058: 0b312623 sw s3,172(sp) + 105c: 0b412423 sw s4,168(sp) + 1060: 0b512223 sw s5,164(sp) + 1064: 0b612023 sw s6,160(sp) + 1068: 09712e23 sw s7,156(sp) + 106c: 09812c23 sw s8,152(sp) + 1070: 09912a23 sw s9,148(sp) + 1074: 09a12823 sw s10,144(sp) + 1078: 09b12623 sw s11,140(sp) + 107c: 000017b7 lui a5,0x1 + 1080: 00a00713 li a4,10 + 1084: 30e7a223 sw a4,772(a5) # 1304 <__bss_start> + 1088: 000017b7 lui a5,0x1 + 108c: 30878793 addi a5,a5,776 # 1308 + 1090: 02c78693 addi a3,a5,44 + 1094: 00100713 li a4,1 + 1098: 00e7a023 sw a4,0(a5) + 109c: 00478793 addi a5,a5,4 + 10a0: fed79ce3 bne a5,a3,1098 + 10a4: 00100793 li a5,1 + 10a8: 04f12423 sw a5,72(sp) + 10ac: 00001cb7 lui s9,0x1 + 10b0: 310c8c93 addi s9,s9,784 # 1310 + 10b4: 04c10a93 addi s5,sp,76 + 10b8: 00200a13 li s4,2 + 10bc: 00a00b13 li s6,10 + 10c0: 00001d37 lui s10,0x1 + 10c4: 00001c37 lui s8,0x1 + 10c8: 308c0c13 addi s8,s8,776 # 1308 + 10cc: 00001db7 lui s11,0x1 + 10d0: 03c0006f j 110c + 10d4: 00241413 slli s0,s0,0x2 + 10d8: 08010793 addi a5,sp,128 + 10dc: 00878433 add s0,a5,s0 + 10e0: 00048593 mv a1,s1 + 10e4: 000aa503 lw a0,0(s5) + 10e8: 140000ef jal ra,1228 <__mulsi3> + 10ec: fca42223 sw a0,-60(s0) + 10f0: 000aa503 lw a0,0(s5) + 10f4: f0dff0ef jal ra,1000 + 10f8: 001a0a13 addi s4,s4,1 + 10fc: 304dab03 lw s6,772(s11) # 1304 <__bss_start> + 1100: 004c8c93 addi s9,s9,4 + 1104: 004a8a93 addi s5,s5,4 + 1108: 0d4b4a63 blt s6,s4,11dc + 110c: 000ca783 lw a5,0(s9) + 1110: 02078463 beqz a5,1138 + 1114: 358d2783 lw a5,856(s10) # 1358 <__bss_end> + 1118: 00178793 addi a5,a5,1 + 111c: 34fd2c23 sw a5,856(s10) + 1120: 00279793 slli a5,a5,0x2 + 1124: 08010713 addi a4,sp,128 + 1128: 00f707b3 add a5,a4,a5 + 112c: f947a423 sw s4,-120(a5) + 1130: fffa0793 addi a5,s4,-1 + 1134: 00faa023 sw a5,0(s5) + 1138: 358d2b83 lw s7,856(s10) + 113c: fb705ae3 blez s7,10f0 + 1140: 00c12483 lw s1,12(sp) + 1144: 000a0593 mv a1,s4 + 1148: 00048513 mv a0,s1 + 114c: 0dc000ef jal ra,1228 <__mulsi3> + 1150: 00050413 mv s0,a0 + 1154: f8ab4ee3 blt s6,a0,10f0 + 1158: 00251793 slli a5,a0,0x2 + 115c: 00fc07b3 add a5,s8,a5 + 1160: 0007a023 sw zero,0(a5) + 1164: 00048593 mv a1,s1 + 1168: 000a0513 mv a0,s4 + 116c: 164000ef jal ra,12d0 <__modsi3> + 1170: 01010993 addi s3,sp,16 + 1174: 00100913 li s2,1 + 1178: f4050ee3 beqz a0,10d4 + 117c: 00241413 slli s0,s0,0x2 + 1180: 08010793 addi a5,sp,128 + 1184: 00878433 add s0,a5,s0 + 1188: fff48593 addi a1,s1,-1 + 118c: 000aa503 lw a0,0(s5) + 1190: 098000ef jal ra,1228 <__mulsi3> + 1194: fca42223 sw a0,-60(s0) + 1198: 00190913 addi s2,s2,1 + 119c: f52bcae3 blt s7,s2,10f0 + 11a0: 0009a483 lw s1,0(s3) + 11a4: 000a0593 mv a1,s4 + 11a8: 00048513 mv a0,s1 + 11ac: 07c000ef jal ra,1228 <__mulsi3> + 11b0: 00050413 mv s0,a0 + 11b4: f2ab4ee3 blt s6,a0,10f0 + 11b8: 00241793 slli a5,s0,0x2 + 11bc: 00fc07b3 add a5,s8,a5 + 11c0: 0007a023 sw zero,0(a5) + 11c4: 00498993 addi s3,s3,4 + 11c8: 00048593 mv a1,s1 + 11cc: 000a0513 mv a0,s4 + 11d0: 100000ef jal ra,12d0 <__modsi3> + 11d4: fa0514e3 bnez a0,117c + 11d8: efdff06f j 10d4 + 11dc: 0fd00593 li a1,253 + 11e0: 000017b7 lui a5,0x1 + 11e4: 35c7a503 lw a0,860(a5) # 135c + 11e8: 0e8000ef jal ra,12d0 <__modsi3> + 11ec: 0bc12083 lw ra,188(sp) + 11f0: 0b812403 lw s0,184(sp) + 11f4: 0b412483 lw s1,180(sp) + 11f8: 0b012903 lw s2,176(sp) + 11fc: 0ac12983 lw s3,172(sp) + 1200: 0a812a03 lw s4,168(sp) + 1204: 0a412a83 lw s5,164(sp) + 1208: 0a012b03 lw s6,160(sp) + 120c: 09c12b83 lw s7,156(sp) + 1210: 09812c03 lw s8,152(sp) + 1214: 09412c83 lw s9,148(sp) + 1218: 09012d03 lw s10,144(sp) + 121c: 08c12d83 lw s11,140(sp) + 1220: 0c010113 addi sp,sp,192 + 1224: 00008067 ret + +00001228 <__mulsi3>: + 1228: 00050613 mv a2,a0 + 122c: 00000513 li a0,0 + 1230: 0015f693 andi a3,a1,1 + 1234: 00068463 beqz a3,123c <__mulsi3+0x14> + 1238: 00c50533 add a0,a0,a2 + 123c: 0015d593 srli a1,a1,0x1 + 1240: 00161613 slli a2,a2,0x1 + 1244: fe0596e3 bnez a1,1230 <__mulsi3+0x8> + 1248: 00008067 ret + +0000124c <__divsi3>: + 124c: 06054063 bltz a0,12ac <__umodsi3+0x10> + 1250: 0605c663 bltz a1,12bc <__umodsi3+0x20> + +00001254 <__udivsi3>: + 1254: 00058613 mv a2,a1 + 1258: 00050593 mv a1,a0 + 125c: fff00513 li a0,-1 + 1260: 02060c63 beqz a2,1298 <__udivsi3+0x44> + 1264: 00100693 li a3,1 + 1268: 00b67a63 bgeu a2,a1,127c <__udivsi3+0x28> + 126c: 00c05863 blez a2,127c <__udivsi3+0x28> + 1270: 00161613 slli a2,a2,0x1 + 1274: 00169693 slli a3,a3,0x1 + 1278: feb66ae3 bltu a2,a1,126c <__udivsi3+0x18> + 127c: 00000513 li a0,0 + 1280: 00c5e663 bltu a1,a2,128c <__udivsi3+0x38> + 1284: 40c585b3 sub a1,a1,a2 + 1288: 00d56533 or a0,a0,a3 + 128c: 0016d693 srli a3,a3,0x1 + 1290: 00165613 srli a2,a2,0x1 + 1294: fe0696e3 bnez a3,1280 <__udivsi3+0x2c> + 1298: 00008067 ret + +0000129c <__umodsi3>: + 129c: 00008293 mv t0,ra + 12a0: fb5ff0ef jal ra,1254 <__udivsi3> + 12a4: 00058513 mv a0,a1 + 12a8: 00028067 jr t0 + 12ac: 40a00533 neg a0,a0 + 12b0: 0005d863 bgez a1,12c0 <__umodsi3+0x24> + 12b4: 40b005b3 neg a1,a1 + 12b8: f9dff06f j 1254 <__udivsi3> + 12bc: 40b005b3 neg a1,a1 + 12c0: 00008293 mv t0,ra + 12c4: f91ff0ef jal ra,1254 <__udivsi3> + 12c8: 40a00533 neg a0,a0 + 12cc: 00028067 jr t0 + +000012d0 <__modsi3>: + 12d0: 00008293 mv t0,ra + 12d4: 0005ca63 bltz a1,12e8 <__modsi3+0x18> + 12d8: 00054c63 bltz a0,12f0 <__modsi3+0x20> + 12dc: f79ff0ef jal ra,1254 <__udivsi3> + 12e0: 00058513 mv a0,a1 + 12e4: 00028067 jr t0 + 12e8: 40b005b3 neg a1,a1 + 12ec: fe0558e3 bgez a0,12dc <__modsi3+0xc> + 12f0: 40a00533 neg a0,a0 + 12f4: f61ff0ef jal ra,1254 <__udivsi3> + 12f8: 40b00533 neg a0,a1 + 12fc: 00028067 jr t0 + +Disassembly of section .srodata: + +00001300 : + 1300: 00fd addi ra,ra,31 + ... + +Disassembly of section .bss: + +00001304 : + 1304: 0000 unimp + ... + +00001308 : + ... + +Disassembly of section .sbss: + +00001358 : + 1358: 0000 unimp + ... + +0000135c : + 135c: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 008e slli ra,ra,0x3 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0048 addi a0,sp,4 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6d00 flw fs0,24(a0) + 46: 6c75 lui s8,0x1d + 48: 6964 flw fs1,84(a0) + 4a: 00532e33 slt t3,t1,t0 + 4e: 0001 nop + 50: 0000 unimp + 52: 0500 addi s0,sp,640 + 54: 2802 fld fa6,0(sp) + 56: 0012 c.slli zero,0x4 + 58: 0300 addi s0,sp,384 + 5a: 0124 addi s1,sp,136 + 5c: 04090103 lb sp,64(s2) + 60: 0100 addi s0,sp,128 + 62: 04090203 lb tp,64(s2) + 66: 0100 addi s0,sp,128 + 68: 04090103 lb sp,64(s2) + 6c: 0100 addi s0,sp,128 + 6e: 04090103 lb sp,64(s2) + 72: 0100 addi s0,sp,128 + 74: 04090203 lb tp,64(s2) + 78: 0100 addi s0,sp,128 + 7a: 04090103 lb sp,64(s2) + 7e: 0100 addi s0,sp,128 + 80: 04090103 lb sp,64(s2) + 84: 0100 addi s0,sp,128 + 86: 04090103 lb sp,64(s2) + 8a: 0100 addi s0,sp,128 + 8c: 0409 addi s0,s0,2 + 8e: 0000 unimp + 90: 0101 addi sp,sp,0 + 92: 0164 addi s1,sp,140 + 94: 0000 unimp + 96: 0002 c.slli64 zero + 98: 0045 c.nop 17 + 9a: 0000 unimp + 9c: 0101 addi sp,sp,0 + 9e: 000d0efb 0xd0efb + a2: 0101 addi sp,sp,0 + a4: 0101 addi sp,sp,0 + a6: 0000 unimp + a8: 0100 addi s0,sp,128 + aa: 0000 unimp + ac: 2e01 jal 3bc + ae: 2f2e fld ft10,200(sp) + b0: 2e2e fld ft8,200(sp) + b2: 2f2e2e2f 0x2f2e2e2f + b6: 2f2e fld ft10,200(sp) + b8: 6972 flw fs2,28(sp) + ba: 2d766373 csrrsi t1,0x2d7,12 + be: 2f636367 0x2f636367 + c2: 696c flw fa1,84(a0) + c4: 6762 flw fa4,24(sp) + c6: 632f6363 bltu t5,s2,6ec + ca: 69666e6f jal t3,66760 <__heap_start+0x64760> + ce: 69722f67 0x69722f67 + d2: 00766373 csrrsi t1,0x7,12 + d6: 6400 flw fs0,8(s0) + d8: 7669 lui a2,0xffffa + da: 532e lw t1,232(sp) + dc: 0100 addi s0,sp,128 + de: 0000 unimp + e0: 0000 unimp + e2: 0205 addi tp,tp,1 + e4: 124c addi a1,sp,292 + e6: 0000 unimp + e8: 0100c403 lbu s0,16(ra) + ec: 04090103 lb sp,64(s2) + f0: 0100 addi s0,sp,128 + f2: 04090403 lb s0,64(s2) + f6: 0100 addi s0,sp,128 + f8: 04090103 lb sp,64(s2) + fc: 0100 addi s0,sp,128 + fe: 04090103 lb sp,64(s2) + 102: 0100 addi s0,sp,128 + 104: 04090103 lb sp,64(s2) + 108: 0100 addi s0,sp,128 + 10a: 04090103 lb sp,64(s2) + 10e: 0100 addi s0,sp,128 + 110: 04090103 lb sp,64(s2) + 114: 0100 addi s0,sp,128 + 116: 04090203 lb tp,64(s2) + 11a: 0100 addi s0,sp,128 + 11c: 04090103 lb sp,64(s2) + 120: 0100 addi s0,sp,128 + 122: 04090103 lb sp,64(s2) + 126: 0100 addi s0,sp,128 + 128: 04090103 lb sp,64(s2) + 12c: 0100 addi s0,sp,128 + 12e: 04090203 lb tp,64(s2) + 132: 0100 addi s0,sp,128 + 134: 04090203 lb tp,64(s2) + 138: 0100 addi s0,sp,128 + 13a: 04090103 lb sp,64(s2) + 13e: 0100 addi s0,sp,128 + 140: 04090103 lb sp,64(s2) + 144: 0100 addi s0,sp,128 + 146: 04090203 lb tp,64(s2) + 14a: 0100 addi s0,sp,128 + 14c: 04090103 lb sp,64(s2) + 150: 0100 addi s0,sp,128 + 152: 04090103 lb sp,64(s2) + 156: 0100 addi s0,sp,128 + 158: 04090203 lb tp,64(s2) + 15c: 0100 addi s0,sp,128 + 15e: 04090503 lb a0,64(s2) + 162: 0100 addi s0,sp,128 + 164: 04090103 lb sp,64(s2) + 168: 0100 addi s0,sp,128 + 16a: 04090103 lb sp,64(s2) + 16e: 0100 addi s0,sp,128 + 170: 04090103 lb sp,64(s2) + 174: 0100 addi s0,sp,128 + 176: 04090503 lb a0,64(s2) + 17a: 0100 addi s0,sp,128 + 17c: 04090103 lb sp,64(s2) + 180: 0100 addi s0,sp,128 + 182: 04090103 lb sp,64(s2) + 186: 0100 addi s0,sp,128 + 188: 04090103 lb sp,64(s2) + 18c: 0100 addi s0,sp,128 + 18e: 04090203 lb tp,64(s2) + 192: 0100 addi s0,sp,128 + 194: 04090203 lb tp,64(s2) + 198: 0100 addi s0,sp,128 + 19a: 04090103 lb sp,64(s2) + 19e: 0100 addi s0,sp,128 + 1a0: 04090103 lb sp,64(s2) + 1a4: 0100 addi s0,sp,128 + 1a6: 04090103 lb sp,64(s2) + 1aa: 0100 addi s0,sp,128 + 1ac: 04090403 lb s0,64(s2) + 1b0: 0100 addi s0,sp,128 + 1b2: 04090103 lb sp,64(s2) + 1b6: 0100 addi s0,sp,128 + 1b8: 04090103 lb sp,64(s2) + 1bc: 0100 addi s0,sp,128 + 1be: 04090203 lb tp,64(s2) + 1c2: 0100 addi s0,sp,128 + 1c4: 04090103 lb sp,64(s2) + 1c8: 0100 addi s0,sp,128 + 1ca: 04090103 lb sp,64(s2) + 1ce: 0100 addi s0,sp,128 + 1d0: 04090203 lb tp,64(s2) + 1d4: 0100 addi s0,sp,128 + 1d6: 04090103 lb sp,64(s2) + 1da: 0100 addi s0,sp,128 + 1dc: 04090203 lb tp,64(s2) + 1e0: 0100 addi s0,sp,128 + 1e2: 04090103 lb sp,64(s2) + 1e6: 0100 addi s0,sp,128 + 1e8: 04090103 lb sp,64(s2) + 1ec: 0100 addi s0,sp,128 + 1ee: 04090103 lb sp,64(s2) + 1f2: 0100 addi s0,sp,128 + 1f4: 0409 addi s0,s0,2 + 1f6: 0000 unimp + 1f8: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 1228 addi a0,sp,296 + 12: 0000 unimp + 14: 124c addi a1,sp,292 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0032 c.slli zero,0xc + 1e: 0000 unimp + 20: 0000008b 0x8b + 24: 8001 c.srli64 s0 + 26: 0022 c.slli zero,0x8 + 28: 0000 unimp + 2a: 0002 c.slli64 zero + 2c: 0014 0x14 + 2e: 0000 unimp + 30: 0104 addi s1,sp,128 + 32: 0092 slli ra,ra,0x4 + 34: 0000 unimp + 36: 124c addi a1,sp,292 + 38: 0000 unimp + 3a: 1300 addi s0,sp,416 + 3c: 0000 unimp + 3e: 0099 addi ra,ra,6 + 40: 0000 unimp + 42: 0032 c.slli zero,0xc + 44: 0000 unimp + 46: 0000008b 0x8b + 4a: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + 12: 0000 unimp + 14: 1101 addi sp,sp,-32 + 16: 1000 addi s0,sp,32 + 18: 1106 slli sp,sp,0x21 + 1a: 1201 addi tp,tp,-32 + 1c: 0301 addi t1,t1,0 + 1e: 1b0e slli s6,s6,0x23 + 20: 250e fld fa0,192(sp) + 22: 130e slli t1,t1,0x23 + 24: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 1228 addi a0,sp,296 + 12: 0000 unimp + 14: 0024 addi s1,sp,8 + ... + 1e: 0000 unimp + 20: 001c 0x1c + 22: 0000 unimp + 24: 0002 c.slli64 zero + 26: 0026 c.slli zero,0x9 + 28: 0000 unimp + 2a: 0004 0x4 + 2c: 0000 unimp + 2e: 0000 unimp + 30: 124c addi a1,sp,292 + 32: 0000 unimp + 34: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 6d2f7663 bgeu t5,s2,6f2 + 2a: 6c75 lui s8,0x1d + 2c: 6964 flw fs1,84(a0) + 2e: 00532e33 slt t3,t1,t0 + 32: 6d6f682f 0x6d6f682f + 36: 2f65 jal 7ee + 38: 712d7577 0x712d7577 + 3c: 6e69 lui t3,0x1a + 3e: 35312d67 0x35312d67 + 42: 69722f37 lui t5,0x69722 + 46: 2d766373 csrrsi t1,0x2d7,12 + 4a: 2d756e67 0x2d756e67 + 4e: 6f74 flw fa3,92(a4) + 50: 68636c6f jal s8,366d6 <__heap_start+0x346d6> + 54: 6961 lui s2,0x18 + 56: 2f6e fld ft10,216(sp) + 58: 7562 flw fa0,56(sp) + 5a: 6c69 lui s8,0x1a + 5c: 2d64 fld fs1,216(a0) + 5e: 2d636367 0x2d636367 + 62: 656e flw fa0,216(sp) + 64: 62696c77 0x62696c77 + 68: 732d lui t1,0xfffeb + 6a: 6174 flw fa3,68(a0) + 6c: 2f326567 0x2f326567 + 70: 6972 flw fs2,28(sp) + 72: 33766373 csrrsi t1,mhpmevent23,12 + 76: 2d32 fld fs10,264(sp) + 78: 6e75 lui t3,0x1d + 7a: 776f6e6b 0x776f6e6b + 7e: 2d6e fld fs10,216(sp) + 80: 6c65 lui s8,0x19 + 82: 2f66 fld ft10,88(sp) + 84: 696c flw fa1,84(a0) + 86: 6762 flw fa4,24(sp) + 88: 47006363 bltu zero,a6,4ee + 8c: 554e lw a0,240(sp) + 8e: 4120 lw s0,64(a0) + 90: 2e322053 0x2e322053 + 94: 312e3133 0x312e3133 + 98: 2e00 fld fs0,24(a2) + 9a: 2f2e fld ft10,200(sp) + 9c: 2e2e fld ft8,200(sp) + 9e: 2f2e2e2f 0x2f2e2e2f + a2: 2f2e fld ft10,200(sp) + a4: 6972 flw fs2,28(sp) + a6: 2d766373 csrrsi t1,0x2d7,12 + aa: 2f636367 0x2f636367 + ae: 696c flw fa1,84(a0) + b0: 6762 flw fa4,24(sp) + b2: 632f6363 bltu t5,s2,6d8 + b6: 69666e6f jal t3,6674c <__heap_start+0x6474c> + ba: 69722f67 0x69722f67 + be: 2f766373 csrrsi t1,0x2f7,12 + c2: 6964 flw fs1,84(a0) + c4: 2e76 fld ft8,344(sp) + c6: fadd.s ft0,ft0,ft0,rne diff --git a/test/testcases/superloop.c b/test/testcases/superloop.c new file mode 100644 index 0000000..46ab35b --- /dev/null +++ b/test/testcases/superloop.c @@ -0,0 +1,38 @@ +#include "io.inc" +// Target: use loops to calculate calculator of 6! +//@author yixi + +int N; +int h = 99; +int i = 100; +int j = 101; +int k = 102; +int total = 0; + +int main() { + int a; + int b; + int c; + int d; + int e; + int f; + N = 6; + for (a = 1; a <= N; a++) + for (b = 1; b <= N; b++) + for (c = 1; c <= N; c++) + for (d = 1; d <= N; d++) + for (e = 1; e <= N; e++) + for (f = 1; f <= N; f++) + if (a != b && a != c && a != d && a != e && a != f && a != h && + a != i && a != j && a != k && b != c && b != d && b != e && + b != f && b != h && b != i && b != j && b != k && c != d && + c != e && c != f && c != h && c != i && c != j && c != k && + d != e && d != f && d != h && d != i && d != j && d != k && + e != f && e != h && e != i && e != j && e != k && f != h && + f != i && f != j && f != k && i != j && h != k) { + total++; + } + + printInt(total); + return judgeResult % Mod; // 134 +} diff --git a/test/testcases/superloop.data b/test/testcases/superloop.data new file mode 100644 index 0000000..cc37ba8 --- /dev/null +++ b/test/testcases/superloop.data @@ -0,0 +1,49 @@ +@00000000 +37 01 02 00 EF 10 00 04 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 47 2A 33 45 F5 00 13 05 D5 0A +23 22 A7 2A 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 47 2A B3 C7 D7 00 93 87 97 20 +23 22 F7 2A 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FF 23 26 11 00 B7 17 00 00 +13 07 60 00 23 AE E7 28 B7 17 00 00 83 A8 87 29 +B7 17 00 00 03 A3 47 29 B7 17 00 00 03 AE 07 29 +B7 17 00 00 83 AE C7 28 B7 17 00 00 03 AF 07 2A +93 0F 00 00 93 07 10 00 93 06 70 00 93 02 10 00 +6F 00 40 10 13 07 17 00 63 0A D7 0A E3 8C C7 FE +E3 8A A7 FE E3 88 07 FF E3 86 B7 FE E3 84 E7 FE +E3 82 F8 FE E3 00 F3 FE E3 0E FE FC E3 8C FE FC +E3 0A A6 FC E3 08 06 FD E3 06 B6 FC E3 04 E6 FC +E3 82 C8 FC E3 00 C3 FC E3 0E CE FA E3 8C CE FA +E3 0A 05 FB E3 08 B5 FA E3 06 E5 FA E3 84 A8 FA +E3 02 A3 FA E3 00 AE FA E3 8E AE F8 E3 0C B8 F8 +E3 0A E8 F8 E3 88 08 F9 E3 06 03 F9 E3 04 0E F9 +E3 82 0E F9 E3 80 E5 F8 E3 8E B8 F6 E3 0C B3 F6 +E3 0A BE F6 E3 88 BE F6 E3 86 E8 F6 E3 04 E3 F6 +E3 02 EE F6 E3 80 EE F6 E3 0E C3 F5 E3 8C D8 F5 +13 0F 1F 00 93 8F 02 00 6F F0 DF F4 93 85 15 00 +63 86 D5 00 13 07 10 00 6F F0 5F F4 13 08 18 00 +63 06 D8 00 93 05 10 00 6F F0 DF FE 13 05 15 00 +63 06 D5 00 13 08 10 00 6F F0 DF FE 13 06 16 00 +63 06 D6 00 13 05 10 00 6F F0 DF FE 93 87 17 00 +63 86 D7 00 13 06 10 00 6F F0 DF FE 63 96 0F 02 +B7 17 00 00 03 A5 07 2A EF F0 9F E5 93 05 D0 0F +B7 17 00 00 03 A5 47 2A EF 00 00 0A 83 20 C1 00 +13 01 01 01 67 80 00 00 B7 17 00 00 23 A0 E7 2B +6F F0 1F FD 63 40 05 06 63 C6 05 06 13 86 05 00 +93 05 05 00 13 05 F0 FF 63 0C 06 02 93 06 10 00 +63 7A B6 00 63 58 C0 00 13 16 16 00 93 96 16 00 +E3 6A B6 FE 13 05 00 00 63 E6 C5 00 B3 85 C5 40 +33 65 D5 00 93 D6 16 00 13 56 16 00 E3 96 06 FE +67 80 00 00 93 82 00 00 EF F0 5F FB 13 85 05 00 +67 80 02 00 33 05 A0 40 63 D8 05 00 B3 05 B0 40 +6F F0 DF F9 B3 05 B0 40 93 82 00 00 EF F0 1F F9 +33 05 A0 40 67 80 02 00 93 82 00 00 63 CA 05 00 +63 4C 05 00 EF F0 9F F7 13 85 05 00 67 80 02 00 +B3 05 B0 40 E3 58 05 FE 33 05 A0 40 EF F0 1F F6 +33 05 B0 40 67 80 02 00 +@00001288 +FD 00 00 00 +@0000128C +66 00 00 00 65 00 00 00 64 00 00 00 63 00 00 00 diff --git a/test/testcases/superloop.dump b/test/testcases/superloop.dump new file mode 100644 index 0000000..50546fc --- /dev/null +++ b/test/testcases/superloop.dump @@ -0,0 +1,482 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 040010ef jal ra,1044
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 2a472783 lw a5,676(a4) # 12a4 + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 2aa72223 sw a0,676(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 2a472683 lw a3,676(a4) # 12a4 + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 2af72223 sw a5,676(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044
: + 1044: ff010113 addi sp,sp,-16 # 1fff0 <__heap_start+0x1dff0> + 1048: 00112623 sw ra,12(sp) + 104c: 000017b7 lui a5,0x1 + 1050: 00600713 li a4,6 + 1054: 28e7ae23 sw a4,668(a5) # 129c + 1058: 000017b7 lui a5,0x1 + 105c: 2987a883 lw a7,664(a5) # 1298 + 1060: 000017b7 lui a5,0x1 + 1064: 2947a303 lw t1,660(a5) # 1294 + 1068: 000017b7 lui a5,0x1 + 106c: 2907ae03 lw t3,656(a5) # 1290 + 1070: 000017b7 lui a5,0x1 + 1074: 28c7ae83 lw t4,652(a5) # 128c <__bss_start> + 1078: 000017b7 lui a5,0x1 + 107c: 2a07af03 lw t5,672(a5) # 12a0 <__bss_end> + 1080: 00000f93 li t6,0 + 1084: 00100793 li a5,1 + 1088: 00700693 li a3,7 + 108c: 00100293 li t0,1 + 1090: 1040006f j 1194 + 1094: 00170713 addi a4,a4,1 + 1098: 0ad70a63 beq a4,a3,114c + 109c: fec78ce3 beq a5,a2,1094 + 10a0: fea78ae3 beq a5,a0,1094 + 10a4: ff0788e3 beq a5,a6,1094 + 10a8: feb786e3 beq a5,a1,1094 + 10ac: fee784e3 beq a5,a4,1094 + 10b0: fef882e3 beq a7,a5,1094 + 10b4: fef300e3 beq t1,a5,1094 + 10b8: fcfe0ee3 beq t3,a5,1094 + 10bc: fcfe8ce3 beq t4,a5,1094 + 10c0: fca60ae3 beq a2,a0,1094 + 10c4: fd0608e3 beq a2,a6,1094 + 10c8: fcb606e3 beq a2,a1,1094 + 10cc: fce604e3 beq a2,a4,1094 + 10d0: fcc882e3 beq a7,a2,1094 + 10d4: fcc300e3 beq t1,a2,1094 + 10d8: face0ee3 beq t3,a2,1094 + 10dc: face8ce3 beq t4,a2,1094 + 10e0: fb050ae3 beq a0,a6,1094 + 10e4: fab508e3 beq a0,a1,1094 + 10e8: fae506e3 beq a0,a4,1094 + 10ec: faa884e3 beq a7,a0,1094 + 10f0: faa302e3 beq t1,a0,1094 + 10f4: faae00e3 beq t3,a0,1094 + 10f8: f8ae8ee3 beq t4,a0,1094 + 10fc: f8b80ce3 beq a6,a1,1094 + 1100: f8e80ae3 beq a6,a4,1094 + 1104: f90888e3 beq a7,a6,1094 + 1108: f90306e3 beq t1,a6,1094 + 110c: f90e04e3 beq t3,a6,1094 + 1110: f90e82e3 beq t4,a6,1094 + 1114: f8e580e3 beq a1,a4,1094 + 1118: f6b88ee3 beq a7,a1,1094 + 111c: f6b30ce3 beq t1,a1,1094 + 1120: f6be0ae3 beq t3,a1,1094 + 1124: f6be88e3 beq t4,a1,1094 + 1128: f6e886e3 beq a7,a4,1094 + 112c: f6e304e3 beq t1,a4,1094 + 1130: f6ee02e3 beq t3,a4,1094 + 1134: f6ee80e3 beq t4,a4,1094 + 1138: f5c30ee3 beq t1,t3,1094 + 113c: f5d88ce3 beq a7,t4,1094 + 1140: 001f0f13 addi t5,t5,1 + 1144: 00028f93 mv t6,t0 + 1148: f4dff06f j 1094 + 114c: 00158593 addi a1,a1,1 + 1150: 00d58663 beq a1,a3,115c + 1154: 00100713 li a4,1 + 1158: f45ff06f j 109c + 115c: 00180813 addi a6,a6,1 + 1160: 00d80663 beq a6,a3,116c + 1164: 00100593 li a1,1 + 1168: fedff06f j 1154 + 116c: 00150513 addi a0,a0,1 + 1170: 00d50663 beq a0,a3,117c + 1174: 00100813 li a6,1 + 1178: fedff06f j 1164 + 117c: 00160613 addi a2,a2,1 + 1180: 00d60663 beq a2,a3,118c + 1184: 00100513 li a0,1 + 1188: fedff06f j 1174 + 118c: 00178793 addi a5,a5,1 + 1190: 00d78663 beq a5,a3,119c + 1194: 00100613 li a2,1 + 1198: fedff06f j 1184 + 119c: 020f9663 bnez t6,11c8 + 11a0: 000017b7 lui a5,0x1 + 11a4: 2a07a503 lw a0,672(a5) # 12a0 <__bss_end> + 11a8: e59ff0ef jal ra,1000 + 11ac: 0fd00593 li a1,253 + 11b0: 000017b7 lui a5,0x1 + 11b4: 2a47a503 lw a0,676(a5) # 12a4 + 11b8: 0a0000ef jal ra,1258 <__modsi3> + 11bc: 00c12083 lw ra,12(sp) + 11c0: 01010113 addi sp,sp,16 + 11c4: 00008067 ret + 11c8: 000017b7 lui a5,0x1 + 11cc: 2be7a023 sw t5,672(a5) # 12a0 <__bss_end> + 11d0: fd1ff06f j 11a0 + +000011d4 <__divsi3>: + 11d4: 06054063 bltz a0,1234 <__umodsi3+0x10> + 11d8: 0605c663 bltz a1,1244 <__umodsi3+0x20> + +000011dc <__udivsi3>: + 11dc: 00058613 mv a2,a1 + 11e0: 00050593 mv a1,a0 + 11e4: fff00513 li a0,-1 + 11e8: 02060c63 beqz a2,1220 <__udivsi3+0x44> + 11ec: 00100693 li a3,1 + 11f0: 00b67a63 bgeu a2,a1,1204 <__udivsi3+0x28> + 11f4: 00c05863 blez a2,1204 <__udivsi3+0x28> + 11f8: 00161613 slli a2,a2,0x1 + 11fc: 00169693 slli a3,a3,0x1 + 1200: feb66ae3 bltu a2,a1,11f4 <__udivsi3+0x18> + 1204: 00000513 li a0,0 + 1208: 00c5e663 bltu a1,a2,1214 <__udivsi3+0x38> + 120c: 40c585b3 sub a1,a1,a2 + 1210: 00d56533 or a0,a0,a3 + 1214: 0016d693 srli a3,a3,0x1 + 1218: 00165613 srli a2,a2,0x1 + 121c: fe0696e3 bnez a3,1208 <__udivsi3+0x2c> + 1220: 00008067 ret + +00001224 <__umodsi3>: + 1224: 00008293 mv t0,ra + 1228: fb5ff0ef jal ra,11dc <__udivsi3> + 122c: 00058513 mv a0,a1 + 1230: 00028067 jr t0 + 1234: 40a00533 neg a0,a0 + 1238: 0005d863 bgez a1,1248 <__umodsi3+0x24> + 123c: 40b005b3 neg a1,a1 + 1240: f9dff06f j 11dc <__udivsi3> + 1244: 40b005b3 neg a1,a1 + 1248: 00008293 mv t0,ra + 124c: f91ff0ef jal ra,11dc <__udivsi3> + 1250: 40a00533 neg a0,a0 + 1254: 00028067 jr t0 + +00001258 <__modsi3>: + 1258: 00008293 mv t0,ra + 125c: 0005ca63 bltz a1,1270 <__modsi3+0x18> + 1260: 00054c63 bltz a0,1278 <__modsi3+0x20> + 1264: f79ff0ef jal ra,11dc <__udivsi3> + 1268: 00058513 mv a0,a1 + 126c: 00028067 jr t0 + 1270: 40b005b3 neg a1,a1 + 1274: fe0558e3 bgez a0,1264 <__modsi3+0xc> + 1278: 40a00533 neg a0,a0 + 127c: f61ff0ef jal ra,11dc <__udivsi3> + 1280: 40b00533 neg a0,a1 + 1284: 00028067 jr t0 + +Disassembly of section .srodata: + +00001288 : + 1288: 00fd addi ra,ra,31 + ... + +Disassembly of section .sdata: + +0000128c : + 128c: 0066 c.slli zero,0x19 + ... + +00001290 : + 1290: 0065 c.nop 25 + ... + +00001294 : + 1294: 0064 addi s1,sp,12 + ... + +00001298 : + 1298: 00000063 beqz zero,1298 + +Disassembly of section .bss: + +0000129c : + 129c: 0000 unimp + ... + +Disassembly of section .sbss: + +000012a0 : + 12a0: 0000 unimp + ... + +000012a4 : + 12a4: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 11d4 addi a3,sp,228 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 11d4 addi a3,sp,228 + 12: 0000 unimp + 14: 1288 addi a0,sp,352 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 11d4 addi a3,sp,228 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12 diff --git a/test/testcases/tak.c b/test/testcases/tak.c new file mode 100644 index 0000000..310a842 --- /dev/null +++ b/test/testcases/tak.c @@ -0,0 +1,15 @@ +#include "io.inc" +int tak(int x, int y, int z) { + if (y < x) + return 1 + tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y)); + else + return z; +} + +int main() { + int a = 18; + int b = 12; + int c = 6; + printInt(tak(a, b, c)); + return judgeResult % Mod; // 186 +} diff --git a/test/testcases/tak.data b/test/testcases/tak.data new file mode 100644 index 0000000..b33e46e --- /dev/null +++ b/test/testcases/tak.data @@ -0,0 +1,35 @@ +@00000000 +37 01 02 00 EF 10 80 0D 13 05 F0 0F B7 06 03 00 +23 82 A6 00 6F F0 9F FF +@00001000 +37 17 00 00 83 27 C7 1C 33 45 F5 00 13 05 D5 0A +23 26 A7 1C 67 80 00 00 83 47 05 00 63 82 07 02 +37 17 00 00 83 26 C7 1C B3 C7 D7 00 93 87 97 20 +23 26 F7 1C 13 05 15 00 83 47 05 00 E3 94 07 FE +67 80 00 00 13 01 01 FE 23 2E 11 00 23 2C 81 00 +23 2A 91 00 23 28 21 01 23 26 31 01 23 24 41 01 +13 04 06 00 63 C4 A5 02 13 05 04 00 83 20 C1 01 +03 24 81 01 83 24 41 01 03 29 01 01 83 29 C1 00 +03 2A 81 00 13 01 01 02 67 80 00 00 93 04 05 00 +13 89 05 00 13 05 F5 FF EF F0 DF FA 93 09 05 00 +13 86 04 00 93 05 04 00 13 05 F9 FF EF F0 9F F9 +13 0A 05 00 13 06 09 00 93 85 04 00 13 05 F4 FF +EF F0 5F F8 13 06 05 00 93 05 0A 00 13 85 09 00 +EF F0 5F F7 13 04 15 00 6F F0 1F F9 13 01 01 FF +23 26 11 00 13 06 60 00 93 05 C0 00 13 05 20 01 +EF F0 5F F5 EF F0 DF F0 93 05 D0 0F B7 17 00 00 +03 A5 C7 1C EF 00 40 09 83 20 C1 00 13 01 01 01 +67 80 00 00 63 40 05 06 63 C6 05 06 13 86 05 00 +93 05 05 00 13 05 F0 FF 63 0C 06 02 93 06 10 00 +63 7A B6 00 63 58 C0 00 13 16 16 00 93 96 16 00 +E3 6A B6 FE 13 05 00 00 63 E6 C5 00 B3 85 C5 40 +33 65 D5 00 93 D6 16 00 13 56 16 00 E3 96 06 FE +67 80 00 00 93 82 00 00 EF F0 5F FB 13 85 05 00 +67 80 02 00 33 05 A0 40 63 D8 05 00 B3 05 B0 40 +6F F0 DF F9 B3 05 B0 40 93 82 00 00 EF F0 1F F9 +33 05 A0 40 67 80 02 00 93 82 00 00 63 CA 05 00 +63 4C 05 00 EF F0 9F F7 13 85 05 00 67 80 02 00 +B3 05 B0 40 E3 58 05 FE 33 05 A0 40 EF F0 1F F6 +33 05 B0 40 67 80 02 00 +@000011C8 +FD 00 00 00 diff --git a/test/testcases/tak.dump b/test/testcases/tak.dump new file mode 100644 index 0000000..4a5e9db --- /dev/null +++ b/test/testcases/tak.dump @@ -0,0 +1,409 @@ + +./test/test.om: file format elf32-littleriscv + + +Disassembly of section .rom: + +00000000 <.rom>: + 0: 00020137 lui sp,0x20 + 4: 0d8010ef jal ra,10dc
+ 8: 0ff00513 li a0,255 + c: 000306b7 lui a3,0x30 + 10: 00a68223 sb a0,4(a3) # 30004 <__heap_start+0x2e004> + 14: ff9ff06f j c + +Disassembly of section .text: + +00001000 : + 1000: 00001737 lui a4,0x1 + 1004: 1cc72783 lw a5,460(a4) # 11cc <__bss_end> + 1008: 00f54533 xor a0,a0,a5 + 100c: 0ad50513 addi a0,a0,173 + 1010: 1ca72623 sw a0,460(a4) + 1014: 00008067 ret + +00001018 : + 1018: 00054783 lbu a5,0(a0) + 101c: 02078263 beqz a5,1040 + 1020: 00001737 lui a4,0x1 + 1024: 1cc72683 lw a3,460(a4) # 11cc <__bss_end> + 1028: 00d7c7b3 xor a5,a5,a3 + 102c: 20978793 addi a5,a5,521 + 1030: 1cf72623 sw a5,460(a4) + 1034: 00150513 addi a0,a0,1 + 1038: 00054783 lbu a5,0(a0) + 103c: fe0794e3 bnez a5,1024 + 1040: 00008067 ret + +00001044 : + 1044: fe010113 addi sp,sp,-32 # 1ffe0 <__heap_start+0x1dfe0> + 1048: 00112e23 sw ra,28(sp) + 104c: 00812c23 sw s0,24(sp) + 1050: 00912a23 sw s1,20(sp) + 1054: 01212823 sw s2,16(sp) + 1058: 01312623 sw s3,12(sp) + 105c: 01412423 sw s4,8(sp) + 1060: 00060413 mv s0,a2 + 1064: 02a5c463 blt a1,a0,108c + 1068: 00040513 mv a0,s0 + 106c: 01c12083 lw ra,28(sp) + 1070: 01812403 lw s0,24(sp) + 1074: 01412483 lw s1,20(sp) + 1078: 01012903 lw s2,16(sp) + 107c: 00c12983 lw s3,12(sp) + 1080: 00812a03 lw s4,8(sp) + 1084: 02010113 addi sp,sp,32 + 1088: 00008067 ret + 108c: 00050493 mv s1,a0 + 1090: 00058913 mv s2,a1 + 1094: fff50513 addi a0,a0,-1 + 1098: fadff0ef jal ra,1044 + 109c: 00050993 mv s3,a0 + 10a0: 00048613 mv a2,s1 + 10a4: 00040593 mv a1,s0 + 10a8: fff90513 addi a0,s2,-1 + 10ac: f99ff0ef jal ra,1044 + 10b0: 00050a13 mv s4,a0 + 10b4: 00090613 mv a2,s2 + 10b8: 00048593 mv a1,s1 + 10bc: fff40513 addi a0,s0,-1 + 10c0: f85ff0ef jal ra,1044 + 10c4: 00050613 mv a2,a0 + 10c8: 000a0593 mv a1,s4 + 10cc: 00098513 mv a0,s3 + 10d0: f75ff0ef jal ra,1044 + 10d4: 00150413 addi s0,a0,1 + 10d8: f91ff06f j 1068 + +000010dc
: + 10dc: ff010113 addi sp,sp,-16 + 10e0: 00112623 sw ra,12(sp) + 10e4: 00600613 li a2,6 + 10e8: 00c00593 li a1,12 + 10ec: 01200513 li a0,18 + 10f0: f55ff0ef jal ra,1044 + 10f4: f0dff0ef jal ra,1000 + 10f8: 0fd00593 li a1,253 + 10fc: 000017b7 lui a5,0x1 + 1100: 1cc7a503 lw a0,460(a5) # 11cc <__bss_end> + 1104: 094000ef jal ra,1198 <__modsi3> + 1108: 00c12083 lw ra,12(sp) + 110c: 01010113 addi sp,sp,16 + 1110: 00008067 ret + +00001114 <__divsi3>: + 1114: 06054063 bltz a0,1174 <__umodsi3+0x10> + 1118: 0605c663 bltz a1,1184 <__umodsi3+0x20> + +0000111c <__udivsi3>: + 111c: 00058613 mv a2,a1 + 1120: 00050593 mv a1,a0 + 1124: fff00513 li a0,-1 + 1128: 02060c63 beqz a2,1160 <__udivsi3+0x44> + 112c: 00100693 li a3,1 + 1130: 00b67a63 bgeu a2,a1,1144 <__udivsi3+0x28> + 1134: 00c05863 blez a2,1144 <__udivsi3+0x28> + 1138: 00161613 slli a2,a2,0x1 + 113c: 00169693 slli a3,a3,0x1 + 1140: feb66ae3 bltu a2,a1,1134 <__udivsi3+0x18> + 1144: 00000513 li a0,0 + 1148: 00c5e663 bltu a1,a2,1154 <__udivsi3+0x38> + 114c: 40c585b3 sub a1,a1,a2 + 1150: 00d56533 or a0,a0,a3 + 1154: 0016d693 srli a3,a3,0x1 + 1158: 00165613 srli a2,a2,0x1 + 115c: fe0696e3 bnez a3,1148 <__udivsi3+0x2c> + 1160: 00008067 ret + +00001164 <__umodsi3>: + 1164: 00008293 mv t0,ra + 1168: fb5ff0ef jal ra,111c <__udivsi3> + 116c: 00058513 mv a0,a1 + 1170: 00028067 jr t0 + 1174: 40a00533 neg a0,a0 + 1178: 0005d863 bgez a1,1188 <__umodsi3+0x24> + 117c: 40b005b3 neg a1,a1 + 1180: f9dff06f j 111c <__udivsi3> + 1184: 40b005b3 neg a1,a1 + 1188: 00008293 mv t0,ra + 118c: f91ff0ef jal ra,111c <__udivsi3> + 1190: 40a00533 neg a0,a0 + 1194: 00028067 jr t0 + +00001198 <__modsi3>: + 1198: 00008293 mv t0,ra + 119c: 0005ca63 bltz a1,11b0 <__modsi3+0x18> + 11a0: 00054c63 bltz a0,11b8 <__modsi3+0x20> + 11a4: f79ff0ef jal ra,111c <__udivsi3> + 11a8: 00058513 mv a0,a1 + 11ac: 00028067 jr t0 + 11b0: 40b005b3 neg a1,a1 + 11b4: fe0558e3 bgez a0,11a4 <__modsi3+0xc> + 11b8: 40a00533 neg a0,a0 + 11bc: f61ff0ef jal ra,111c <__udivsi3> + 11c0: 40b00533 neg a0,a1 + 11c4: 00028067 jr t0 + +Disassembly of section .srodata: + +000011c8 : + 11c8: 00fd addi ra,ra,31 + ... + +Disassembly of section .sbss: + +000011cc : + 11cc: 0000 unimp + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm + 4: 2820 fld fs0,80(s0) + 6: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm + a: 3820 fld fs0,112(s0) + c: 332e fld ft6,232(sp) + e: 302e fld ft0,232(sp) + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 0164 addi s1,sp,140 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0045 c.nop 17 + 8: 0000 unimp + a: 0101 addi sp,sp,0 + c: 000d0efb 0xd0efb + 10: 0101 addi sp,sp,0 + 12: 0101 addi sp,sp,0 + 14: 0000 unimp + 16: 0100 addi s0,sp,128 + 18: 0000 unimp + 1a: 2e01 jal 32a + 1c: 2f2e fld ft10,200(sp) + 1e: 2e2e fld ft8,200(sp) + 20: 2f2e2e2f 0x2f2e2e2f + 24: 2f2e fld ft10,200(sp) + 26: 6972 flw fs2,28(sp) + 28: 2d766373 csrrsi t1,0x2d7,12 + 2c: 2f636367 0x2f636367 + 30: 696c flw fa1,84(a0) + 32: 6762 flw fa4,24(sp) + 34: 632f6363 bltu t5,s2,65a + 38: 69666e6f jal t3,666ce <__heap_start+0x646ce> + 3c: 69722f67 0x69722f67 + 40: 00766373 csrrsi t1,0x7,12 + 44: 6400 flw fs0,8(s0) + 46: 7669 lui a2,0xffffa + 48: 532e lw t1,232(sp) + 4a: 0100 addi s0,sp,128 + 4c: 0000 unimp + 4e: 0000 unimp + 50: 0205 addi tp,tp,1 + 52: 1114 addi a3,sp,160 + 54: 0000 unimp + 56: 0100c403 lbu s0,16(ra) + 5a: 04090103 lb sp,64(s2) + 5e: 0100 addi s0,sp,128 + 60: 04090403 lb s0,64(s2) + 64: 0100 addi s0,sp,128 + 66: 04090103 lb sp,64(s2) + 6a: 0100 addi s0,sp,128 + 6c: 04090103 lb sp,64(s2) + 70: 0100 addi s0,sp,128 + 72: 04090103 lb sp,64(s2) + 76: 0100 addi s0,sp,128 + 78: 04090103 lb sp,64(s2) + 7c: 0100 addi s0,sp,128 + 7e: 04090103 lb sp,64(s2) + 82: 0100 addi s0,sp,128 + 84: 04090203 lb tp,64(s2) + 88: 0100 addi s0,sp,128 + 8a: 04090103 lb sp,64(s2) + 8e: 0100 addi s0,sp,128 + 90: 04090103 lb sp,64(s2) + 94: 0100 addi s0,sp,128 + 96: 04090103 lb sp,64(s2) + 9a: 0100 addi s0,sp,128 + 9c: 04090203 lb tp,64(s2) + a0: 0100 addi s0,sp,128 + a2: 04090203 lb tp,64(s2) + a6: 0100 addi s0,sp,128 + a8: 04090103 lb sp,64(s2) + ac: 0100 addi s0,sp,128 + ae: 04090103 lb sp,64(s2) + b2: 0100 addi s0,sp,128 + b4: 04090203 lb tp,64(s2) + b8: 0100 addi s0,sp,128 + ba: 04090103 lb sp,64(s2) + be: 0100 addi s0,sp,128 + c0: 04090103 lb sp,64(s2) + c4: 0100 addi s0,sp,128 + c6: 04090203 lb tp,64(s2) + ca: 0100 addi s0,sp,128 + cc: 04090503 lb a0,64(s2) + d0: 0100 addi s0,sp,128 + d2: 04090103 lb sp,64(s2) + d6: 0100 addi s0,sp,128 + d8: 04090103 lb sp,64(s2) + dc: 0100 addi s0,sp,128 + de: 04090103 lb sp,64(s2) + e2: 0100 addi s0,sp,128 + e4: 04090503 lb a0,64(s2) + e8: 0100 addi s0,sp,128 + ea: 04090103 lb sp,64(s2) + ee: 0100 addi s0,sp,128 + f0: 04090103 lb sp,64(s2) + f4: 0100 addi s0,sp,128 + f6: 04090103 lb sp,64(s2) + fa: 0100 addi s0,sp,128 + fc: 04090203 lb tp,64(s2) + 100: 0100 addi s0,sp,128 + 102: 04090203 lb tp,64(s2) + 106: 0100 addi s0,sp,128 + 108: 04090103 lb sp,64(s2) + 10c: 0100 addi s0,sp,128 + 10e: 04090103 lb sp,64(s2) + 112: 0100 addi s0,sp,128 + 114: 04090103 lb sp,64(s2) + 118: 0100 addi s0,sp,128 + 11a: 04090403 lb s0,64(s2) + 11e: 0100 addi s0,sp,128 + 120: 04090103 lb sp,64(s2) + 124: 0100 addi s0,sp,128 + 126: 04090103 lb sp,64(s2) + 12a: 0100 addi s0,sp,128 + 12c: 04090203 lb tp,64(s2) + 130: 0100 addi s0,sp,128 + 132: 04090103 lb sp,64(s2) + 136: 0100 addi s0,sp,128 + 138: 04090103 lb sp,64(s2) + 13c: 0100 addi s0,sp,128 + 13e: 04090203 lb tp,64(s2) + 142: 0100 addi s0,sp,128 + 144: 04090103 lb sp,64(s2) + 148: 0100 addi s0,sp,128 + 14a: 04090203 lb tp,64(s2) + 14e: 0100 addi s0,sp,128 + 150: 04090103 lb sp,64(s2) + 154: 0100 addi s0,sp,128 + 156: 04090103 lb sp,64(s2) + 15a: 0100 addi s0,sp,128 + 15c: 04090103 lb sp,64(s2) + 160: 0100 addi s0,sp,128 + 162: 0409 addi s0,s0,2 + 164: 0000 unimp + 166: 0101 addi sp,sp,0 + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 0022 c.slli zero,0x8 + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0104 addi s1,sp,128 + c: 0000 unimp + e: 0000 unimp + 10: 1114 addi a3,sp,160 + 12: 0000 unimp + 14: 11c8 addi a0,sp,228 + 16: 0000 unimp + 18: 0000 unimp + 1a: 0000 unimp + 1c: 0000002f 0x2f + 20: 0088 addi a0,sp,64 + 22: 0000 unimp + 24: 8001 c.srli64 s0 + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 1101 addi sp,sp,-32 + 2: 1000 addi s0,sp,32 + 4: 1106 slli sp,sp,0x21 + 6: 1201 addi tp,tp,-32 + 8: 0301 addi t1,t1,0 + a: 1b0e slli s6,s6,0x23 + c: 250e fld fa0,192(sp) + e: 130e slli t1,t1,0x23 + 10: 0005 c.nop 1 + ... + +Disassembly of section .debug_aranges: + +00000000 <.debug_aranges>: + 0: 001c 0x1c + 2: 0000 unimp + 4: 0002 c.slli64 zero + 6: 0000 unimp + 8: 0000 unimp + a: 0004 0x4 + c: 0000 unimp + e: 0000 unimp + 10: 1114 addi a3,sp,160 + 12: 0000 unimp + 14: 00b4 addi a3,sp,72 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 2e2e fld ft8,200(sp) + 2: 2f2e2e2f 0x2f2e2e2f + 6: 2e2e fld ft8,200(sp) + 8: 722f2e2f 0x722f2e2f + c: 7369 lui t1,0xffffa + e: 672d7663 bgeu s10,s2,67a + 12: 6c2f6363 bltu t5,sp,6d8 + 16: 6269 lui tp,0x1a + 18: 2f636367 0x2f636367 + 1c: 666e6f63 bltu t3,t1,69a + 20: 6769 lui a4,0x1a + 22: 7369722f 0x7369722f + 26: 642f7663 bgeu t5,sp,672 + 2a: 7669 lui a2,0xffffa + 2c: 532e lw t1,232(sp) + 2e: 2f00 fld fs0,24(a4) + 30: 6f68 flw fa0,92(a4) + 32: 656d lui a0,0x1b + 34: 2d75772f 0x2d75772f + 38: 6971 lui s2,0x1c + 3a: 676e flw fa4,216(sp) + 3c: 312d jal fffffc66 <__heap_start+0xffffdc66> + 3e: 3735 jal ffffff6a <__heap_start+0xffffdf6a> + 40: 7369722f 0x7369722f + 44: 672d7663 bgeu s10,s2,6b0 + 48: 756e flw fa0,248(sp) + 4a: 742d lui s0,0xfffeb + 4c: 636c6f6f jal t5,c6682 <__heap_start+0xc4682> + 50: 6168 flw fa0,68(a0) + 52: 6e69 lui t3,0x1a + 54: 6975622f 0x6975622f + 58: 646c flw fa1,76(s0) + 5a: 672d lui a4,0xb + 5c: 6e2d6363 bltu s10,sp,742 + 60: 7765 lui a4,0xffff9 + 62: 696c flw fa1,84(a0) + 64: 2d62 fld fs10,24(sp) + 66: 67617473 csrrci s0,0x676,2 + 6a: 3265 jal fffffa12 <__heap_start+0xffffda12> + 6c: 7369722f 0x7369722f + 70: 32337663 bgeu t1,gp,39c + 74: 752d lui a0,0xfffeb + 76: 6b6e flw fs6,216(sp) + 78: 6f6e flw ft10,216(sp) + 7a: 652d6e77 0x652d6e77 + 7e: 666c flw fa1,76(a2) + 80: 62696c2f 0x62696c2f + 84: 00636367 0x636367 + 88: 20554e47 fmsub.s ft8,fa0,ft5,ft4,rmm + 8c: 5341 li t1,-16 + 8e: 3220 fld fs0,96(a2) + 90: 332e fld ft6,232(sp) + 92: 2e31 jal 3ae + 94: 0031 c.nop 12