Mail Archives: djgpp-workers/1996/11/26/15:51:01
This is a patch that fixes the stack problems with libm and interrupts
or fpu emulation.
Apply in src/libm/src.
*** old/s_ceil.s Tue Nov 26 20:19:04 1996
--- new/s_ceil.s Tue Nov 26 20:19:11 1996
***************
*** 43,59 ****
movl %esp,%ebp
subl $8,%esp
! fstcw -12(%ebp) /* store fpu control word */
! movw -12(%ebp),%dx
orw $0x0800,%dx /* round towards +oo */
andw $0xfbff,%dx
! movw %dx,-16(%ebp)
! fldcw -16(%ebp) /* load modfied control word */
fldl 8(%ebp); /* round */
frndint
! fldcw -12(%ebp) /* restore original control word */
leave
ret
--- 43,60 ----
movl %esp,%ebp
subl $8,%esp
! fstcw -4(%ebp) /* store fpu control word */
! movw -4(%ebp),%dx
orw $0x0800,%dx /* round towards +oo */
andw $0xfbff,%dx
! movw %dx,-8(%ebp)
! fldcw -8(%ebp) /* load modfied control word */
fldl 8(%ebp); /* round */
frndint
! fldcw -4(%ebp) /* restore original control word */
leave
ret
+
diff -c old/s_floor.s new/s_floor.s
*** old/s_floor.s Tue Nov 26 20:19:04 1996
--- new/s_floor.s Tue Nov 26 20:19:11 1996
***************
*** 43,59 ****
movl %esp,%ebp
subl $8,%esp
! fstcw -12(%ebp) /* store fpu control word */
! movw -12(%ebp),%dx
orw $0x0400,%dx /* round towards -oo */
andw $0xf7ff,%dx
! movw %dx,-16(%ebp)
! fldcw -16(%ebp) /* load modfied control word */
fldl 8(%ebp); /* round */
frndint
! fldcw -12(%ebp) /* restore original control word */
leave
ret
--- 43,59 ----
movl %esp,%ebp
subl $8,%esp
! fstcw -4(%ebp) /* store fpu control word */
! movw -4(%ebp),%dx
orw $0x0400,%dx /* round towards -oo */
andw $0xf7ff,%dx
! movw %dx,-8(%ebp)
! fldcw -8(%ebp) /* load modfied control word */
fldl 8(%ebp); /* round */
frndint
! fldcw -4(%ebp) /* restore original control word */
leave
ret
diff -c old/sf_ceil.s new/sf_ceil.s
*** old/sf_ceil.s Tue Nov 26 20:19:04 1996
--- new/sf_ceil.s Tue Nov 26 20:19:11 1996
***************
*** 43,59 ****
movl %esp,%ebp
subl $8,%esp
! fstcw -12(%ebp) /* store fpu control word */
! movw -12(%ebp),%dx
orw $0x0800,%dx /* round towards +oo */
andw $0xfbff,%dx
! movw %dx,-16(%ebp)
! fldcw -16(%ebp) /* load modfied control word */
flds 8(%ebp); /* round */
frndint
! fldcw -12(%ebp) /* restore original control word */
leave
ret
--- 43,59 ----
movl %esp,%ebp
subl $8,%esp
! fstcw -4(%ebp) /* store fpu control word */
! movw -4(%ebp),%dx
orw $0x0800,%dx /* round towards +oo */
andw $0xfbff,%dx
! movw %dx,-8(%ebp)
! fldcw -8(%ebp) /* load modfied control word */
flds 8(%ebp); /* round */
frndint
! fldcw -4(%ebp) /* restore original control word */
leave
ret
diff -c old/sf_floor.s new/sf_floor.s
*** old/sf_floor.s Tue Nov 26 20:19:04 1996
--- new/sf_floor.s Tue Nov 26 20:19:11 1996
***************
*** 43,59 ****
movl %esp,%ebp
subl $8,%esp
! fstcw -12(%ebp) /* store fpu control word */
! movw -12(%ebp),%dx
orw $0x0400,%dx /* round towards -oo */
andw $0xf7ff,%dx
! movw %dx,-16(%ebp)
! fldcw -16(%ebp) /* load modfied control word */
flds 8(%ebp); /* round */
frndint
! fldcw -12(%ebp) /* restore original control word */
leave
ret
--- 43,59 ----
movl %esp,%ebp
subl $8,%esp
! fstcw -4(%ebp) /* store fpu control word */
! movw -4(%ebp),%dx
orw $0x0400,%dx /* round towards -oo */
andw $0xf7ff,%dx
! movw %dx,-8(%ebp)
! fldcw -8(%ebp) /* load modfied control word */
flds 8(%ebp); /* round */
frndint
! fldcw -4(%ebp) /* restore original control word */
leave
ret
- Raw text -