|
Last change
on this file since 3070 was 378, checked in by bird, 22 years ago |
|
#563: wanna do this on linux too.
|
-
Property cvs2svn:cvs-rev
set to
1.2
-
Property svn:eol-style
set to
native
-
Property svn:executable
set to
*
-
Property svn:keywords
set to
Author Date Id Revision
|
|
File size:
1.2 KB
|
| Line | |
|---|
| 1 | / control.s (emx+gcc) -- Copyright (c) 1993-1996 by Eberhard Mattes
|
|---|
| 2 |
|
|---|
| 3 | .globl __control87
|
|---|
| 4 | .globl _control87
|
|---|
| 5 |
|
|---|
| 6 | .text
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 | / unsigned _control87 (unsigned new, unsigned mask)
|
|---|
| 10 |
|
|---|
| 11 | #define cw_old 0(%esp)
|
|---|
| 12 | #define cw_new 2(%esp)
|
|---|
| 13 | /define ret_addr 4(%esp)
|
|---|
| 14 | #define new 8(%esp)
|
|---|
| 15 | #define mask 12(%esp)
|
|---|
| 16 |
|
|---|
| 17 | _control87:
|
|---|
| 18 | __control87:
|
|---|
| 19 | pushl %ecx /* Dummy (for control word) */
|
|---|
| 20 | fstcw cw_old /* Store control word into memory */
|
|---|
| 21 | movl mask, %ecx /* Get mask */
|
|---|
| 22 | jecxz 1f /* Do not set cw => done */
|
|---|
| 23 | movl new, %edx /* Get new bits */
|
|---|
| 24 | andl %ecx, %edx /* Mask new bits by mask bits */
|
|---|
| 25 | notl %ecx
|
|---|
| 26 | movl cw_old, %eax /* Get old cw */
|
|---|
| 27 | andl %ecx, %eax /* Apply mask to old cw */
|
|---|
| 28 | orl %edx, %eax /* Insert new bits */
|
|---|
| 29 | movw %ax, cw_new /* Put new cw into memory */
|
|---|
| 30 | fldcw cw_new /* Load control word */
|
|---|
| 31 | 1: popl %eax /* Return old cw in lower 16 bits */
|
|---|
| 32 | movzwl %ax, %eax /* Clear upper 16 bits */
|
|---|
| 33 | ret
|
|---|
| 34 |
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.