1 //Original:/proj/frio/dv/testcases/seq/se_cc_kill/se_cc_kill.dsp 2 // Description: 3 // Verify CC kill under the following condition: 4 // 5 // (1) CC = AZ killed in WB 6 // (2) CC = AN killed in WB 7 // (3) CC = AC killed in WB 8 // (4) CC = AV0 killed in WB 9 // (5) CC = AV1 killed in WB 10 // (6) CC = AQ killed in WB 11 # mach: bfin 12 # sim: --environment operating 13 14 #include "test.h" 15 .include "testutils.inc" 16 start 17 18 // ---------------------------------------------------------------- 19 // Include Files 20 // ---------------------------------------------------------------- 21 22 include(std.inc) 23 include(selfcheck.inc) 24 include(symtable.inc) 25 include(mmrs.inc) 26 27 // ---------------------------------------------------------------- 28 // Defines 29 // ---------------------------------------------------------------- 30 31 #ifndef STACKSIZE 32 #define STACKSIZE 0x00000010 33 #endif 34 #ifndef ITABLE 35 #define ITABLE CODE_ADDR_1 // 36 #endif 37 38 39 // ---------------------------------------------------------------- 40 // Reset ISR 41 // - set the processor operating modes 42 // - initialize registers 43 // - etc ... 44 // ---------------------------------------------------------------- 45 46 RST_ISR: 47 48 // Initialize data registers 49 //INIT_R_REGS(0); 50 R7 = 0; 51 R6 = 0; 52 R5 = 0; 53 R4 = 0; 54 R3 = 0; 55 R2 = 0; 56 R1 = 0; 57 R0 = 0; 58 59 // Initialize pointer registers 60 INIT_P_REGS(0); 61 62 // Initialize address registers 63 INIT_I_REGS(0); 64 INIT_M_REGS(0); 65 INIT_L_REGS(0); 66 INIT_B_REGS(0); 67 68 // Initialize the address of the checkreg data segment 69 // **** THIS IS NEEDED WHENEVER CHECKREG IS USED **** 70 CHECK_INIT_DEF(p5); //CHECK_INIT(p5, 0x00BFFFFC); 71 72 // Inhibit events during MMR writes 73 CLI R1; 74 75 // Setup user stack 76 LD32_LABEL(sp, USTACK); 77 USP = SP; 78 79 // Setup kernel stack 80 LD32_LABEL(sp, KSTACK); 81 82 // Setup frame pointer 83 FP = SP; 84 85 // Setup event vector table 86 LD32(p0, EVT0); 87 88 LD32_LABEL(r0, EMU_ISR); // Emulation Handler (EVT0) 89 [ P0 ++ ] = R0; 90 LD32_LABEL(r0, RST_ISR); // Reset Handler (EVT1) 91 [ P0 ++ ] = R0; 92 LD32_LABEL(r0, NMI_ISR); // NMI Handler (EVT2) 93 [ P0 ++ ] = R0; 94 LD32_LABEL(r0, EXC_ISR); // Exception Handler (EVT3) 95 [ P0 ++ ] = R0; 96 [ P0 ++ ] = R0; // EVT4 not used 97 LD32_LABEL(r0, HWE_ISR); // HW Error Handler (EVT5) 98 [ P0 ++ ] = R0; 99 LD32_LABEL(r0, TMR_ISR); // Timer Handler (EVT6) 100 [ P0 ++ ] = R0; 101 LD32_LABEL(r0, IGV7_ISR); // IVG7 Handler 102 [ P0 ++ ] = R0; 103 LD32_LABEL(r0, IGV8_ISR); // IVG8 Handler 104 [ P0 ++ ] = R0; 105 LD32_LABEL(r0, IGV9_ISR); // IVG9 Handler 106 [ P0 ++ ] = R0; 107 LD32_LABEL(r0, IGV10_ISR); // IVG10 Handler 108 [ P0 ++ ] = R0; 109 LD32_LABEL(r0, IGV11_ISR); // IVG11 Handler 110 [ P0 ++ ] = R0; 111 LD32_LABEL(r0, IGV12_ISR); // IVG12 Handler 112 [ P0 ++ ] = R0; 113 LD32_LABEL(r0, IGV13_ISR); // IVG13 Handler 114 [ P0 ++ ] = R0; 115 LD32_LABEL(r0, IGV14_ISR); // IVG14 Handler 116 [ P0 ++ ] = R0; 117 LD32_LABEL(r0, IGV15_ISR); // IVG15 Handler 118 [ P0 ++ ] = R0; 119 120 // Set the EVT_OVERRIDE MMR 121 LD32(p0, EVT_OVERRIDE); 122 R0 = 0; 123 [ P0 ++ ] = R0; 124 125 // Disable L1 data cache 126 WR_MMR(DMEM_CONTROL, 0x00000000, p0, r0); 127 128 // Mask interrupts (*) 129 R1 = -1; 130 131 // Wait for MMR writes to finish 132 CSYNC; 133 134 // Re-enable events 135 STI R1; 136 137 // Reset loop counters to deterministic values 138 R0 = 0 (Z); 139 140 LT0 = R0; 141 LB0 = R0; 142 LC0 = R0; 143 LT1 = R0; 144 LB1 = R0; 145 LC1 = R0; 146 147 // Reset other internal regs 148 ASTAT = R0; 149 SYSCFG = R0; 150 RETS = R0; 151 152 // Setup the test to run in USER mode 153 LD32_LABEL(r0, USER_CODE); 154 RETI = R0; 155 156 // Setup the test to run in SUPERVISOR mode 157 // Comment the following line for a USER mode test 158 JUMP.S SUPERVISOR_CODE; 159 RTI; 160 161 SUPERVISOR_CODE: 162 // Load IVG15 general handler (Int15) with MAIN_CODE 163 LD32_LABEL(p1, MAIN_CODE); 164 165 LD32(p0, EVT15); 166 167 CLI R1; 168 [ P0 ] = P1; 169 CSYNC; 170 STI R1; 171 172 // Take Int15 which branch to MAIN_CODE after RTI 173 RAISE 15; 174 RTI; 175 176 USER_CODE: 177 // Setup the stack pointer and the frame pointer 178 LD32_LABEL(sp, USTACK); 179 FP = SP; 180 JUMP.S MAIN_CODE; 181 182 .dw 0xFFFF 183 .dw 0xFFFF 184 .dw 0xFFFF 185 .dw 0xFFFF 186 .dw 0xFFFF 187 .dw 0xFFFF 188 .dw 0xFFFF 189 190 // ---------------------------------------------------------------- 191 // ISR Table 192 // ---------------------------------------------------------------- 193 194 195 // ---------------------------------------------------------------- 196 // EMU ISR 197 // ---------------------------------------------------------------- 198 199 EMU_ISR : 200 201 RTE; 202 203 .dw 0xFFFF 204 .dw 0xFFFF 205 .dw 0xFFFF 206 .dw 0xFFFF 207 .dw 0xFFFF 208 .dw 0xFFFF 209 .dw 0xFFFF 210 211 // ---------------------------------------------------------------- 212 // NMI ISR 213 // ---------------------------------------------------------------- 214 215 NMI_ISR : 216 217 RTN; 218 219 .dw 0xFFFF 220 .dw 0xFFFF 221 .dw 0xFFFF 222 .dw 0xFFFF 223 .dw 0xFFFF 224 .dw 0xFFFF 225 .dw 0xFFFF 226 227 // ---------------------------------------------------------------- 228 // EXC ISR 229 // ---------------------------------------------------------------- 230 231 EXC_ISR : 232 233 RTX; 234 235 .dw 0xFFFF 236 .dw 0xFFFF 237 .dw 0xFFFF 238 .dw 0xFFFF 239 .dw 0xFFFF 240 .dw 0xFFFF 241 .dw 0xFFFF 242 243 // ---------------------------------------------------------------- 244 // HWE ISR 245 // ---------------------------------------------------------------- 246 247 HWE_ISR : 248 249 RTI; 250 251 .dw 0xFFFF 252 .dw 0xFFFF 253 .dw 0xFFFF 254 .dw 0xFFFF 255 .dw 0xFFFF 256 .dw 0xFFFF 257 .dw 0xFFFF 258 259 // ---------------------------------------------------------------- 260 // TMR ISR 261 // ---------------------------------------------------------------- 262 263 TMR_ISR : 264 265 RTI; 266 267 .dw 0xFFFF 268 .dw 0xFFFF 269 .dw 0xFFFF 270 .dw 0xFFFF 271 .dw 0xFFFF 272 .dw 0xFFFF 273 .dw 0xFFFF 274 275 // ---------------------------------------------------------------- 276 // IGV7 ISR 277 // ---------------------------------------------------------------- 278 279 IGV7_ISR : 280 281 RTI; 282 283 .dw 0xFFFF 284 .dw 0xFFFF 285 .dw 0xFFFF 286 .dw 0xFFFF 287 .dw 0xFFFF 288 .dw 0xFFFF 289 .dw 0xFFFF 290 291 // ---------------------------------------------------------------- 292 // IGV8 ISR 293 // ---------------------------------------------------------------- 294 295 IGV8_ISR : 296 297 RTI; 298 299 .dw 0xFFFF 300 .dw 0xFFFF 301 .dw 0xFFFF 302 .dw 0xFFFF 303 .dw 0xFFFF 304 .dw 0xFFFF 305 .dw 0xFFFF 306 307 // ---------------------------------------------------------------- 308 // IGV9 ISR 309 // ---------------------------------------------------------------- 310 311 IGV9_ISR : 312 313 RTI; 314 315 .dw 0xFFFF 316 .dw 0xFFFF 317 .dw 0xFFFF 318 .dw 0xFFFF 319 .dw 0xFFFF 320 .dw 0xFFFF 321 .dw 0xFFFF 322 323 // ---------------------------------------------------------------- 324 // IGV10 ISR 325 // ---------------------------------------------------------------- 326 327 IGV10_ISR : 328 329 RTI; 330 331 .dw 0xFFFF 332 .dw 0xFFFF 333 .dw 0xFFFF 334 .dw 0xFFFF 335 .dw 0xFFFF 336 .dw 0xFFFF 337 .dw 0xFFFF 338 339 // ---------------------------------------------------------------- 340 // IGV11 ISR 341 // ---------------------------------------------------------------- 342 343 IGV11_ISR : 344 345 RTI; 346 347 .dw 0xFFFF 348 .dw 0xFFFF 349 .dw 0xFFFF 350 .dw 0xFFFF 351 .dw 0xFFFF 352 .dw 0xFFFF 353 .dw 0xFFFF 354 355 // ---------------------------------------------------------------- 356 // IGV12 ISR 357 // ---------------------------------------------------------------- 358 359 IGV12_ISR : 360 361 RTI; 362 363 .dw 0xFFFF 364 .dw 0xFFFF 365 .dw 0xFFFF 366 .dw 0xFFFF 367 .dw 0xFFFF 368 .dw 0xFFFF 369 .dw 0xFFFF 370 371 // ---------------------------------------------------------------- 372 // IGV13 ISR 373 // ---------------------------------------------------------------- 374 375 IGV13_ISR : 376 377 RTI; 378 379 .dw 0xFFFF 380 .dw 0xFFFF 381 .dw 0xFFFF 382 .dw 0xFFFF 383 .dw 0xFFFF 384 .dw 0xFFFF 385 .dw 0xFFFF 386 387 // ---------------------------------------------------------------- 388 // IGV14 ISR 389 // ---------------------------------------------------------------- 390 391 IGV14_ISR : 392 393 RTI; 394 395 .dw 0xFFFF 396 .dw 0xFFFF 397 .dw 0xFFFF 398 .dw 0xFFFF 399 .dw 0xFFFF 400 .dw 0xFFFF 401 .dw 0xFFFF 402 403 // ---------------------------------------------------------------- 404 // IGV15 ISR 405 // ---------------------------------------------------------------- 406 407 IGV15_ISR : 408 409 RTI; 410 411 .dw 0xFFFF 412 .dw 0xFFFF 413 .dw 0xFFFF 414 .dw 0xFFFF 415 .dw 0xFFFF 416 .dw 0xFFFF 417 .dw 0xFFFF 418 419 // ---------------------------------------------------------------- 420 // Main Code 421 // ---------------------------------------------------------------- 422 423 424 MAIN_CODE: 425 // Enable interrupts in SUPERVISOR mode 426 // Comment the following line for a USER mode test 427 [ -- SP ] = RETI; 428 429 // Start of the program code 430 431 // Verify CC kill under the following condition: 432 433 // (1) CC = AZ killed in WB 434 CC = R2 < R3; 435 EXCPT 3; 436 CC = AZ; 437 438 // (2) CC = AN killed in WB 439 CC = R2 == R3; 440 EXCPT 3; 441 CC = AN; 442 443 // (3) CC = AC killed in WB 444 CC = R2 < R3; 445 EXCPT 3; 446 CC = AC0; 447 448 // (4) CC = AV0 killed in WB 449 CC = R2 == R3; 450 EXCPT 3; 451 CC = AV0; 452 453 // (5) CC = AV1 killed in WB 454 CC = R2 == R3; 455 EXCPT 3; 456 CC = AV1; 457 458 // (6) CC = AQ killed in WB 459 CC = R2 == R3; 460 EXCPT 3; 461 CC = AQ; 462 463 464 END: 465 dbg_pass; 466 467 // ---------------------------------------------------------------- 468 // Data Segment 469 // - define kernel and user stacks 470 // ---------------------------------------------------------------- 471 472 .data 473 DATA: 474 .space (STACKSIZE); 475 476 .space (STACKSIZE); 477 KSTACK: 478 479 .space (STACKSIZE); 480 USTACK: 481