|
|
1.1 ! root 1: .include "macros.inc" ! 2: ! 3: test_suite windowed ! 4: ! 5: .altmacro ! 6: ! 7: .macro reset_window start ! 8: movi a2, 0xff ! 9: wsr a2, windowstart ! 10: rsync ! 11: movi a2, 0 ! 12: wsr a2, windowbase ! 13: rsync ! 14: movi a2, \start ! 15: wsr a2, windowstart ! 16: rsync ! 17: .endm ! 18: ! 19: .macro overflow_test shift, window, probe_ok, probe_ex ! 20: set_vector window_overflow_4, 0 ! 21: set_vector window_overflow_8, 0 ! 22: set_vector window_overflow_12, 0 ! 23: ! 24: movi a2, 1 | (((1 << ((\window) / 4)) | 1) << ((\shift) / 4)) ! 25: wsr a2, windowstart ! 26: reset_ps ! 27: ! 28: mov a2, a\probe_ok ! 29: set_vector window_overflow_\window, 10f ! 30: 1: ! 31: mov a2, a\probe_ex ! 32: test_fail ! 33: 10: ! 34: rsr a2, epc1 ! 35: movi a3, 1b ! 36: assert eq, a2, a3 ! 37: movi a2, 2f ! 38: wsr a2, epc1 ! 39: ! 40: rsr a2, windowbase ! 41: movi a3, (\shift) / 4 ! 42: assert eq, a2, a3 ! 43: rsr a2, ps ! 44: movi a3, 0x4001f ! 45: assert eq, a2, a3 ! 46: rfwo ! 47: test_fail ! 48: 2: ! 49: rsr a2, windowbase ! 50: assert eqi, a2, 0 ! 51: rsr a2, windowstart ! 52: movi a3, 1 | ((1 << ((\window) / 4)) << ((\shift) / 4)) ! 53: assert eq, a2, a3 ! 54: rsr a2, ps ! 55: movi a3, 0x4000f ! 56: assert eq, a2, a3 ! 57: .endm ! 58: ! 59: .macro overflow_tests shift, window, probe ! 60: .if \probe < 15 ! 61: overflow_test \shift, \window, %((\shift) - 1), \probe ! 62: overflow_tests \shift, \window, %((\probe) + 1) ! 63: .endif ! 64: .endm ! 65: ! 66: .macro all_overflow_tests ! 67: .irp shift, 4, 8, 12 ! 68: .irp window, 4, 8, 12 ! 69: overflow_tests \shift, \window, \shift ! 70: .endr ! 71: .endr ! 72: .endm ! 73: ! 74: test overflow ! 75: all_overflow_tests ! 76: test_end ! 77: ! 78: ! 79: .macro underflow_test window ! 80: set_vector window_underflow_4, 0 ! 81: set_vector window_underflow_8, 0 ! 82: set_vector window_underflow_12, 0 ! 83: ! 84: set_vector window_underflow_\window, 10f ! 85: ! 86: reset_window 1 ! 87: reset_ps ! 88: ! 89: ssai 2 ! 90: movi a2, 2f ! 91: slli a2, a2, 2 ! 92: movi a3, (\window) / 4 ! 93: src a0, a3, a2 ! 94: 1: ! 95: retw ! 96: test_fail ! 97: 10: ! 98: rsr a2, epc1 ! 99: movi a3, 1b ! 100: assert eq, a2, a3 ! 101: movi a2, 2f ! 102: wsr a2, epc1 ! 103: ! 104: rsr a2, ps ! 105: movi a3, 0x4001f ! 106: assert eq, a2, a3 ! 107: rsr a2, windowbase ! 108: assert eqi, a2, 8 - ((\window) / 4) ! 109: rsr a2, windowstart ! 110: assert eqi, a2, 1 ! 111: rfwu ! 112: 2: ! 113: rsr a2, ps ! 114: movi a3, 0x4000f ! 115: assert eq, a2, a3 ! 116: rsr a2, windowbase ! 117: assert eqi, a2, 0 ! 118: rsr a2, windowstart ! 119: assert bsi, a2, 0 ! 120: assert bsi, a2, 8 - ((\window) / 4) ! 121: .endm ! 122: ! 123: test underflow ! 124: set_vector window_overflow_4, 0 ! 125: set_vector window_overflow_8, 0 ! 126: set_vector window_overflow_12, 0 ! 127: ! 128: underflow_test 4 ! 129: underflow_test 8 ! 130: underflow_test 12 ! 131: test_end ! 132: ! 133: ! 134: .macro retw_test window ! 135: reset_window %(1 | (1 << (8 - (\window) / 4))) ! 136: reset_ps ! 137: ! 138: ssai 2 ! 139: movi a2, 1f ! 140: slli a2, a2, 2 ! 141: movi a3, (\window) / 4 ! 142: src a0, a3, a2 ! 143: retw ! 144: test_fail ! 145: 1: ! 146: rsr a2, ps ! 147: movi a3, 0x4000f ! 148: assert eq, a2, a3 ! 149: rsr a2, windowbase ! 150: assert eqi, a2, 8 - ((\window) / 4) ! 151: rsr a2, windowstart ! 152: assert bci, a2, 0 ! 153: assert bsi, a2, 8 - ((\window) / 4) ! 154: .endm ! 155: ! 156: test retw ! 157: set_vector window_underflow_4, 0 ! 158: set_vector window_underflow_8, 0 ! 159: set_vector window_underflow_12, 0 ! 160: ! 161: retw_test 4 ! 162: retw_test 8 ! 163: retw_test 12 ! 164: test_end ! 165: ! 166: test movsp ! 167: set_vector kernel, 2f ! 168: ! 169: reset_window 1 ! 170: reset_ps ! 171: 1: ! 172: movsp a2, a3 ! 173: test_fail ! 174: 2: ! 175: rsr a2, exccause ! 176: assert eqi, a2, 5 ! 177: rsr a2, epc1 ! 178: movi a3, 1b ! 179: assert eq, a2, a3 ! 180: ! 181: set_vector kernel, 0 ! 182: ! 183: reset_window 0x81 ! 184: reset_ps ! 185: ! 186: movsp a2, a3 ! 187: test_end ! 188: ! 189: test rotw ! 190: reset_window 0x4b ! 191: reset_ps ! 192: ! 193: movi a3, 0x10 ! 194: ! 195: rotw 1 ! 196: rsr a2, windowbase ! 197: assert eqi, a2, 1 ! 198: movi a3, 0x11 ! 199: movi a7, 0x12 ! 200: ! 201: rotw 2 ! 202: rsr a2, windowbase ! 203: assert eqi, a2, 3 ! 204: movi a3, 0x13 ! 205: movi a7, 0x14 ! 206: movi a11, 0x15 ! 207: ! 208: rotw 3 ! 209: rsr a2, windowbase ! 210: assert eqi, a2, 6 ! 211: movi a3, 0x16 ! 212: movi a7, 0x17 ! 213: ! 214: movi a2, 0x44 ! 215: wsr a2, windowstart ! 216: rsync ! 217: ! 218: movi a2, 0x10 ! 219: assert eq, a2, a11 ! 220: movi a11, 0x18 ! 221: movi a2, 0x11 ! 222: assert eq, a2, a15 ! 223: movi a15, 0x19 ! 224: ! 225: rotw 4 ! 226: movi a2, 0x12 ! 227: assert eq, a2, a3 ! 228: movi a2, 0x13 ! 229: assert eq, a2, a7 ! 230: movi a2, 0x14 ! 231: assert eq, a2, a11 ! 232: movi a2, 0x15 ! 233: assert eq, a2, a15 ! 234: ! 235: movi a2, 0x5 ! 236: wsr a2, windowstart ! 237: rsync ! 238: ! 239: rotw -2 ! 240: movi a2, 0x18 ! 241: assert eq, a2, a3 ! 242: movi a2, 0x19 ! 243: assert eq, a2, a7 ! 244: test_end ! 245: ! 246: .macro callw_test window ! 247: call\window 2f ! 248: 1: ! 249: test_fail ! 250: .align 4 ! 251: 2: ! 252: rsr a2, windowbase ! 253: assert eqi, a2, 0 ! 254: rsr a2, ps ! 255: movi a3, 0x4000f | ((\window) << 14) ! 256: assert eq, a2, a3 ! 257: movi a2, 1b ! 258: slli a2, a2, 2 ! 259: ssai 2 ! 260: movi a3, (\window) / 4 ! 261: src a2, a3, a2 ! 262: assert eq, a2, a\window ! 263: .endm ! 264: ! 265: test callw ! 266: reset_window 0x1 ! 267: reset_ps ! 268: ! 269: callw_test 4 ! 270: callw_test 8 ! 271: callw_test 12 ! 272: test_end ! 273: ! 274: ! 275: .macro entry_test window ! 276: reset_window 0x1 ! 277: reset_ps ! 278: movi a2, 0x4000f | ((\window) << 14) ! 279: wsr a2, ps ! 280: isync ! 281: movi a3, 0x12345678 ! 282: j 1f ! 283: .align 4 ! 284: 1: ! 285: entry a3, 0x5678 ! 286: movi a2, 0x12340000 ! 287: assert eq, a2, a3 ! 288: rsr a2, windowbase ! 289: assert eqi, a2, (\window) / 4 ! 290: rsr a2, windowstart ! 291: movi a3, 1 | (1 << ((\window) / 4)) ! 292: assert eq, a2, a3 ! 293: rotw -(\window) / 4 ! 294: .endm ! 295: ! 296: test entry ! 297: entry_test 4 ! 298: entry_test 8 ! 299: entry_test 12 ! 300: test_end ! 301: ! 302: test_suite_end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.