Print this page
8609 want a position independent CRT
*** 22,45 ****
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
! .ident "%Z%%M% %I% %E% SMI"
.file "fsr.s"
.section .data
.align 4
- .weak __fsr_init_value
-
- __fsr_init_value_ptr:
- .4byte __fsr_init_value
- .type __fsr_init_value_ptr,@object
- .size __fsr_init_value_ptr,4
-
/*
* The following table maps trap enable bits in __fsr_init_value
* (after shifting right one bit):
*
* bit 0 - inexact trap
--- 22,38 ----
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
! #include <sys/asm_linkage.h>
.file "fsr.s"
.section .data
.align 4
/*
* The following table maps trap enable bits in __fsr_init_value
* (after shifting right one bit):
*
* bit 0 - inexact trap
*** 92,124 ****
.byte 0b11100010
.byte 0b11000010
.size trap_table,32
! .section .text
! .align 4
!
! .globl __fsr
! .type __fsr,@function
! __fsr:
pushl %ebp
movl %esp,%ebp
pushl %edx
pushl %ecx
subl $4,%esp
! lea __fsr_init_value_ptr, %ecx
! movl (%ecx),%ecx /* get the value set by CG */
shrl $1,%ecx /* get rid of fns bit */
cmpl $0,%ecx /* if remaining bits are zero */
je 3f /* there's nothing to do */
fstcw 0(%esp) /* store the control word */
movl %ecx,%edx
andl $0x1f,%edx /* get the trap enable bits */
! movb trap_table(%edx),%al
andb %al,0(%esp) /* unmask the corresponding exceptions */
testl $0x200,%ecx /* test denormal trap enable */
jz 1f /* skip if zero */
--- 85,119 ----
.byte 0b11100010
.byte 0b11000010
.size trap_table,32
! ENTRY_NP(__fsr)
pushl %ebp
movl %esp,%ebp
pushl %edx
pushl %ecx
+ pushl %ebx
subl $4,%esp
! /* Setup PIC */
! call 9f
! 9: popl %ebx
! addl $_GLOBAL_OFFSET_TABLE_ + [. - 9b], %ebx
!
! movl 8(%ebp), %ecx /* the value set by CG is passed in */
shrl $1,%ecx /* get rid of fns bit */
cmpl $0,%ecx /* if remaining bits are zero */
je 3f /* there's nothing to do */
fstcw 0(%esp) /* store the control word */
movl %ecx,%edx
andl $0x1f,%edx /* get the trap enable bits */
! movl trap_table@GOT(%ebx), %eax
! addl %eax,%edx
! movb (%edx),%al
andb %al,0(%esp) /* unmask the corresponding exceptions */
testl $0x200,%ecx /* test denormal trap enable */
jz 1f /* skip if zero */
*** 149,159 ****
1:
fldcw 0(%esp) /* load the modified control word */
3:
addl $4,%esp
popl %ecx
popl %edx
popl %ebp
ret
!
! .size __fsr,[.-__fsr]
--- 144,154 ----
1:
fldcw 0(%esp) /* load the modified control word */
3:
addl $4,%esp
+ popl %ebx
popl %ecx
popl %edx
popl %ebp
ret
! SET_SIZE(__fsr)