Subversion Repositories HelenOS

Compare Revisions

Regard whitespace Rev 1056 → Rev 1053

/kernel/trunk/arch/ia64/src/ivt.S
62,6 → 62,8
* This goal is achieved by using procedure calls after RSE becomes operational.
*
* Some steps are skipped (enabling and disabling interrupts).
* Some steps are not fully supported yet (e.g. dealing with floating-point
* context).
*
* @param offs Offset from the beginning of IVT.
* @param handler Interrupt handler address.
81,11 → 83,11
* Note that r24-r31 from bank 0 can be used only as long as PSR.ic = 0.
*/
/* Set up FPU as in interrupted context. */
/*Set up FPU as in interrupred*/
mov r24 = psr
mov r25 = cr.ipsr
mov r26 = PSR_DFH_MASK
mov r27 = ~PSR_DFH_MASK ;;
mov r26=(PSR_DFH_MASK)
mov r27=(~(PSR_DFH_MASK));;
and r26 = r25, r26
and r24 = r24, r27;;
or r24 = r24, r26;;
249,16 → 251,16
mov cr.iipa = r26
mov cr.isr = r27
mov cr.ifa = r28
 
/* Set up FPU as in exception. */
/*Set up FPU as in exception*/
mov r24 = psr
mov r26 = PSR_DFH_MASK
mov r27 = ~PSR_DFH_MASK ;;
mov r26=(PSR_DFH_MASK)
mov r27=(~(PSR_DFH_MASK));;
and r25 = r25, r27
and r24 = r24, r26 ;;
or r25 = r25, r24;;
mov cr.ipsr = r25
 
 
/* 18. restore predicate registers from memory stack */
ld8 r29 = [r31], +8 ;; /* load predicate registers */
mov pr = r29
305,6 → 307,7
mov loc16 = b7
/* 8. preserve general and floating-point registers */
/* TODO: save floating-point context */
mov loc17 = r1
mov loc18 = r2
mov loc19 = r3
337,14 → 340,22
mov loc45 = r30
mov loc46 = r31
 
add r24 = 96 + STACK_SCRATCH_AREA_SIZE, r12
add r25 = 112 + STACK_SCRATCH_AREA_SIZE, r12
add r26 = 0 + STACK_SCRATCH_AREA_SIZE, r12
add r27 = 16 + STACK_SCRATCH_AREA_SIZE, r12
add r28 = 32 + STACK_SCRATCH_AREA_SIZE, r12
add r29 = 48 + STACK_SCRATCH_AREA_SIZE, r12
add r30 = 64 + STACK_SCRATCH_AREA_SIZE, r12
add r31 = 80 + STACK_SCRATCH_AREA_SIZE, r12 ;;
mov r24=96 + STACK_SCRATCH_AREA_SIZE
mov r25=112 + STACK_SCRATCH_AREA_SIZE
mov r26=0 + STACK_SCRATCH_AREA_SIZE
mov r27=16 + STACK_SCRATCH_AREA_SIZE
mov r28=32 + STACK_SCRATCH_AREA_SIZE
mov r29=48 + STACK_SCRATCH_AREA_SIZE
mov r30=64 + STACK_SCRATCH_AREA_SIZE
mov r31=80 + STACK_SCRATCH_AREA_SIZE;;
add r24=r12,r24
add r25=r12,r25
add r26=r12,r26
add r27=r12,r27
add r28=r12,r28
add r29=r12,r29
add r30=r12,r30
add r31=r12,r31;;
stf.spill [r26] = f2, 0x80
stf.spill [r27] = f3, 0x80
380,7 → 391,8
stf.spill [r30] = f30, 0x80
stf.spill [r31] = f31, 0x80 ;;
 
mov loc47 = ar.fpsr /* preserve floating point status register */
/* preserve Floating point status register */
mov loc47 = ar.fpsr
/* 9. skipped (will not enable interrupts) */
/*
406,15 → 418,25
*/
 
/* 13. restore general and floating-point registers */
add r24 = 96 + STACK_SCRATCH_AREA_SIZE, r12
add r25 = 112 + STACK_SCRATCH_AREA_SIZE, r12
add r26 = 0 + STACK_SCRATCH_AREA_SIZE, r12
add r27 = 16 + STACK_SCRATCH_AREA_SIZE, r12
add r28 = 32 + STACK_SCRATCH_AREA_SIZE, r12
add r29 = 48 + STACK_SCRATCH_AREA_SIZE, r12
add r30 = 64 + STACK_SCRATCH_AREA_SIZE, r12
add r31 = 80 + STACK_SCRATCH_AREA_SIZE, r12 ;;
/* TODO: restore floating-point context */
mov r24=96 + STACK_SCRATCH_AREA_SIZE
mov r25=112 + STACK_SCRATCH_AREA_SIZE
mov r26=0 + STACK_SCRATCH_AREA_SIZE
mov r27=16 + STACK_SCRATCH_AREA_SIZE
mov r28=32 + STACK_SCRATCH_AREA_SIZE
mov r29=48 + STACK_SCRATCH_AREA_SIZE
mov r30=64 + STACK_SCRATCH_AREA_SIZE
mov r31=80 + STACK_SCRATCH_AREA_SIZE;;
add r24=r12,r24
add r25=r12,r25
add r26=r12,r26
add r27=r12,r27
add r28=r12,r28
add r29=r12,r29
add r30=r12,r30
add r31=r12,r31;;
 
ldf.fill f2 = [r26], 0x80
ldf.fill f3 = [r27], 0x80
ldf.fill f4 = [r28], 0x80
449,6 → 471,7
ldf.fill f30 = [r30], 0x80
ldf.fill f31 = [r31], 0x80 ;;
mov r1 = loc17
mov r2 = loc18
mov r3 = loc19
481,7 → 504,8
mov r30 = loc45
mov r31 = loc46
 
mov ar.fpsr = loc47 /* restore floating point status register */
/* restore Floating point status register */
mov ar.fpsr = loc47
/* 14. restore branch and application registers */
mov ar.unat = loc3
583,3 → 607,7
HEAVYWEIGHT_HANDLER 0x7d00
HEAVYWEIGHT_HANDLER 0x7e00
HEAVYWEIGHT_HANDLER 0x7f00