|
88 | 88 | .endm |
89 | 89 | #endif |
90 | 90 |
|
| 91 | +/* macro to save accl regs */ |
91 | 92 | .macro SAVE_R58_R59 |
92 | 93 | #if ARC_FEATURE_FPU || ARC_FEATURE_DSP || ARC_FEATURE_MPU_OPTION_NUM > 6 |
93 | 94 | PUSH r58 |
94 | 95 | PUSH r59 |
95 | 96 | #endif |
96 | 97 | .endm |
97 | 98 |
|
| 99 | +/* macro to restore accl regs */ |
98 | 100 | .macro RESTORE_R58_R59 |
99 | 101 | #if ARC_FEATURE_FPU || ARC_FEATURE_DSP || ARC_FEATURE_MPU_OPTION_NUM > 6 |
100 | 102 | POP r59 |
101 | 103 | POP r58 |
102 | 104 | #endif |
103 | 105 | .endm |
104 | 106 |
|
| 107 | +/* macro to save fpu related regs */ |
105 | 108 | .macro SAVE_FPU_REGS |
106 | 109 | #if ARC_FEATURE_FPU |
107 | 110 | PUSHAX AUX_FPU_CTRL |
|
117 | 120 | #endif |
118 | 121 | .endm |
119 | 122 |
|
| 123 | +/* macro to restore fpu related regs */ |
120 | 124 | .macro RESTORE_FPU_REGS |
121 | 125 | #if ARC_FEATURE_FPU |
122 | 126 |
|
|
132 | 136 |
|
133 | 137 | .endm |
134 | 138 |
|
135 | | - |
| 139 | +/* macro to save dsp related regs */ |
136 | 140 | .macro SAVE_DSP_REGS |
137 | 141 | #if ARC_FEATURE_DSP |
138 | 142 | PUSHAX AUX_DSP_CTRL |
|
149 | 153 | #endif |
150 | 154 | .endm |
151 | 155 |
|
| 156 | +/* macro to restore dsp related regs */ |
152 | 157 | .macro RESTORE_DSP_REGS |
153 | 158 | #if ARC_FEATURE_DSP |
154 | 159 |
|
|
196 | 201 | #endif |
197 | 202 |
|
198 | 203 | #if ARC_FEATURE_FPU_DSP_CONTEXT |
199 | | - SAVE_R58_R59 |
200 | 204 | SAVE_FPU_REGS |
201 | 205 | SAVE_DSP_REGS |
202 | 206 | #endif |
|
208 | 212 | #if ARC_FEATURE_FPU_DSP_CONTEXT |
209 | 213 | RESTORE_DSP_REGS |
210 | 214 | RESTORE_FPU_REGS |
211 | | - RESTORE_R58_R59 |
212 | 215 | #endif |
213 | 216 |
|
214 | 217 | #if defined(ARC_ENABLE_EXTRA_CALLEE) |
|
237 | 240 | POP r13 |
238 | 241 | .endm |
239 | 242 |
|
| 243 | +/* macro to clear callee regs */ |
240 | 244 | .macro CLEAR_CALLEE_REGS |
241 | 245 | #ifndef ARC_FEATURE_RF16 |
242 | 246 | mov r25, 0 |
|
280 | 284 | sr 0, [AUX_DSP_CTRL] |
281 | 285 | #endif /* ARC_FEATURE_DSP */ |
282 | 286 |
|
283 | | -#if ARC_FEATURE_FPU || ARC_FEATURE_DSP || ARC_FEATURE_MPU_OPTION_NUM > 6 |
284 | | - mov r59, 0 |
285 | | - mov r58, 0 |
286 | | -#endif |
287 | | - |
288 | 287 | #endif /* ARC_FEATURE_FPU_DSP_CONTEXT */ |
289 | 288 | .endm |
290 | 289 |
|
| 290 | +/* macro to clear scratch regs */ |
291 | 291 | .macro CLEAR_SCRATCH_REGS |
292 | 292 | mov r1, 0 |
293 | 293 | mov r2, 0 |
|
302 | 302 | mov r11, 0 |
303 | 303 | mov r12, 0 |
304 | 304 |
|
| 305 | +#if ARC_FEATURE_FPU || ARC_FEATURE_DSP || ARC_FEATURE_MPU_OPTION_NUM > 6 |
| 306 | + mov r59, 0 |
| 307 | + mov r58, 0 |
| 308 | +#endif |
305 | 309 | mov fp, 0 |
306 | 310 | mov r29, 0 |
307 | 311 | mov r30, 0 |
|
322 | 326 |
|
323 | 327 | .endm |
324 | 328 |
|
| 329 | +/* macro to save r0 to r12 */ |
325 | 330 | .macro SAVE_R0_TO_R12 |
326 | 331 | PUSH r0 |
327 | 332 | PUSH r1 |
|
340 | 345 | PUSH r12 |
341 | 346 | .endm |
342 | 347 |
|
| 348 | +/* macro to restore r0 to r12 */ |
343 | 349 | .macro RESTORE_R0_TO_R12 |
344 | 350 | POP r12 |
345 | 351 | POP r11 |
|
358 | 364 | POP r0 |
359 | 365 | .endm |
360 | 366 |
|
| 367 | +/* macro to save code density regs */ |
361 | 368 | .macro SAVE_CODE_DENSITY |
362 | 369 | PUSHAX AUX_JLI_BASE |
363 | 370 | PUSHAX AUX_LDI_BASE |
364 | 371 | PUSHAX AUX_EI_BASE |
365 | 372 | .endm |
366 | 373 |
|
| 374 | +/* macro to restore code density regs */ |
367 | 375 | .macro RESTORE_CODE_DENSITY |
368 | 376 | POPAX AUX_EI_BASE |
369 | 377 | POPAX AUX_LDI_BASE |
370 | 378 | POPAX AUX_JLI_BASE |
371 | 379 | .endm |
372 | 380 |
|
373 | | -/* todo: check the contents of NON_SCRATCH_REGS in debug */ |
| 381 | +/* macro to save all non-caller saved regs */ |
374 | 382 | .macro SAVE_NONSCRATCH_REGS |
375 | | -/* r0-r12 are saved by caller function */ |
| 383 | +/* caller saved regs are saved by caller function */ |
376 | 384 | PUSH gp |
377 | 385 | PUSH fp |
378 | 386 | PUSH blink |
379 | 387 | SAVE_CALLEE_REGS |
380 | 388 | .endm |
381 | 389 |
|
| 390 | +/* macro to restore all non-caller saved regs */ |
382 | 391 | .macro RESTORE_NONSCRATCH_REGS |
383 | 392 | RESTORE_CALLEE_REGS |
384 | 393 | POP blink |
385 | 394 | POP fp |
386 | 395 | POP gp |
387 | 396 | .endm |
388 | 397 |
|
389 | | - |
| 398 | +/* macro to save regs in firq */ |
390 | 399 | .macro SAVE_FIQ_EXC_REGS |
391 | 400 | #ifndef ARC_FEATURE_RGF_BANKED_REGS |
392 | 401 | SAVE_R0_TO_R12 |
393 | 402 |
|
| 403 | + SAVE_R58_R59 |
| 404 | + |
394 | 405 | PUSH gp |
395 | 406 | PUSH fp |
396 | 407 | PUSH r30 /* general purpose */ |
|
402 | 413 | #error "unsupported ARC_FEATURE_RGF_BANKED_REGS" |
403 | 414 | #endif |
404 | 415 |
|
405 | | -#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_BANKED_REGS == 8 || \ |
| 416 | +#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_RGF_BANKED_REGS == 8 || \ |
406 | 417 | ARC_FEATURE_RGF_BANKED_REGS == 16 |
407 | 418 | #ifndef ARC_FEATURE_RF16 |
408 | 419 | PUSH r4 |
|
414 | 425 | #endif |
415 | 426 | #endif |
416 | 427 |
|
417 | | -#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_BANKED_REGS == 8 |
| 428 | +#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_RGF_BANKED_REGS == 8 |
418 | 429 | PUSH r10 |
419 | 430 | PUSH r11 |
420 | 431 | #endif |
|
423 | 434 | PUSH r12 |
424 | 435 | #endif |
425 | 436 |
|
426 | | -#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_BANKED_REGS == 8 |
| 437 | + SAVE_R58_R59 |
| 438 | + |
| 439 | +#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_RGF_BANKED_REGS == 8 |
427 | 440 | PUSH gp |
428 | 441 | PUSH fp |
429 | 442 | PUSH r30 /* general purpose */ |
|
438 | 451 | SAVE_LP_REGS |
439 | 452 | .endm |
440 | 453 |
|
| 454 | +/* macro to restore reg in firq */ |
441 | 455 | .macro RESTORE_FIQ_EXC_REGS |
442 | 456 | RESTORE_LP_REGS |
443 | 457 | #if ARC_FEATURE_CODE_DENSITY |
|
450 | 464 | POP fp |
451 | 465 | POP gp |
452 | 466 |
|
| 467 | + RESTORE_R58_R59 |
| 468 | + |
453 | 469 | RESTORE_R0_TO_R12 |
454 | 470 | #else |
455 | 471 |
|
|
458 | 474 | #error "unsupported ARC_FEATURE_RGF_BANKED_REGS" |
459 | 475 | #endif |
460 | 476 |
|
461 | | -#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_BANKED_REGS == 8 |
| 477 | +#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_RGF_BANKED_REGS == 8 |
462 | 478 | POP blink |
463 | 479 | POP r30 |
464 | 480 | POP fp |
465 | 481 | POP gp |
466 | 482 | #endif |
467 | 483 |
|
| 484 | + RESTORE_R58_R59 |
| 485 | + |
468 | 486 | #if ARC_FEATURE_RGF_BANKED_REGS == 4 |
469 | 487 | POP r12 |
470 | 488 | #endif |
471 | 489 |
|
472 | | -#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_BANKED_REGS == 8 |
| 490 | +#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_RGF_BANKED_REGS == 8 |
473 | 491 | POP r11 |
474 | 492 | POP r10 |
475 | 493 | #endif |
476 | 494 |
|
477 | | -#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_BANKED_REGS == 8 || \ |
| 495 | +#if ARC_FEATURE_RGF_BANKED_REGS == 4 || ARC_FEATURE_RGF_BANKED_REGS == 8 || \ |
478 | 496 | ARC_FEATURE_RGF_BANKED_REGS == 16 |
479 | 497 | #ifndef ARC_FEATURE_RF16 |
480 | 498 | POP r9 |
|
492 | 510 | /* normal interrupt prologue, pc, status and r0-r11 are saved by hardware */ |
493 | 511 | .macro INTERRUPT_PROLOGUE |
494 | 512 | PUSH r12 |
| 513 | + SAVE_R58_R59 |
495 | 514 | PUSH gp |
496 | 515 | PUSH fp |
497 | 516 | PUSH ilink |
|
509 | 528 | POP ilink |
510 | 529 | POP fp |
511 | 530 | POP gp |
| 531 | + RESTORE_R58_R59 |
512 | 532 | POP r12 |
513 | 533 | .endm |
514 | 534 |
|
|
544 | 564 | SAVE_LP_REGS |
545 | 565 |
|
546 | 566 | PUSH r12 |
| 567 | + SAVE_R58_R59 |
547 | 568 | PUSH gp |
548 | 569 | PUSH fp |
549 | 570 | PUSH ilink |
|
560 | 581 | POP ilink |
561 | 582 | POP fp |
562 | 583 | POP gp |
| 584 | + RESTORE_R58_R59 |
563 | 585 | POP r12 |
564 | 586 |
|
565 | 587 | RESTORE_LP_REGS |
|
584 | 606 |
|
585 | 607 | POP blink |
586 | 608 |
|
587 | | - |
588 | 609 | POPAX AUX_ERRET |
589 | 610 | add sp, sp, 4 /* slot for SEC_STAT */ |
590 | 611 | POPAX AUX_ERSTATUS |
|
625 | 646 | PUSH r0 |
626 | 647 |
|
627 | 648 | PUSH r12 |
| 649 | + SAVE_R58_R59 |
628 | 650 | PUSH gp |
629 | 651 | PUSH fp |
630 | 652 | PUSH ilink |
|
641 | 663 | POP ilink |
642 | 664 | POP fp |
643 | 665 | POP gp |
| 666 | + RESTORE_R58_R59 |
644 | 667 | POP r12 |
645 | 668 |
|
646 | 669 | POP r0 |
|
0 commit comments