Changeset 219 for soft


Ignore:
Timestamp:
Oct 4, 2012, 10:56:18 AM (12 years ago)
Author:
meunier
Message:

Correction d'un bug dans _int_handler : on ne sauvegardait pas les registres HI et LO
(problématique si interruption reçue entre multu et mfhi par exemple)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/sys/giet.s

    r189 r219  
    101101
    102102_int_handler:
    103     addiu   $29,    $29,    -23*4   /* stack space reservation (19 registers to
     103    addiu   $29,    $29,    -25*4   /* stack space reservation (21 registers to
    104104                                       save and 4 free words to call function) */
    105105    .set noat
     
    123123    sw      $25,    20*4($29)       /* save $25 */
    124124    sw      $31,    21*4($29)       /* save $31 */
     125    mflo    $26
     126    sw      $26,    22*4($29)       /* save LO */
     127    mfhi    $26
     128    sw      $26,    23*4($29)       /* save HI */
    125129    mfc0    $27,    $14
    126     sw      $27,    22*4($29)       /* save EPC */
     130    sw      $27,    24*4($29)       /* save EPC */
    127131
    128132    la      $26,    _irq_demux
     
    150154    lw      $25,    4*20($29)       /* restore $25 */
    151155    lw      $31,    4*21($29)       /* restore $31 */
    152     lw      $27,    4*22($29)       /* return address (EPC) */
    153     addiu   $29,    $29,    23*4    /* restore stack pointer */
     156    lw      $26,    4*22($29)
     157    mtlo    $26                     /* restore LO */
     158    lw      $26,    4*23($29)
     159    mthi    $26                     /* restore HI */
     160    lw      $27,    4*24($29)       /* return address (EPC) */
     161    addiu   $29,    $29,    25*4    /* restore stack pointer */
    154162    mtc0    $27,    $14             /* restore EPC */
    155163    eret                            /* exit GIET */
Note: See TracChangeset for help on using the changeset viewer.