Changeset 3396f59 in mainline for arch/amd64/src/fpu_context.c
- Timestamp:
- 2005-09-04T08:28:55Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8ff2f3f
- Parents:
- 005384ad
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/src/fpu_context.c
r005384ad r3396f59 1 1 /* 2 * Copyright (C) 2005 Martin Decky2 * Copyright (C) 2005 Jakub Vana 3 3 * All rights reserved. 4 4 * … … 25 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 27 28 */ 28 29 29 #ifndef __amd64_FPU_CONTEXT_H__ 30 #define __amd64_FPU_CONTEXT_H__ 30 #include <fpu_context.h> 31 #include <arch.h> 32 #include <cpu.h> 31 33 32 #include <arch/types.h> 34 void fpu_context_save(fpu_context_t *fctx) 35 { 36 } 33 37 34 struct fpu_context { 35 }; 38 void fpu_context_restore(fpu_context_t *fctx) 39 { 40 if(THREAD==CPU->fpu_owner) 41 reset_TS_flag(); 42 else { 43 set_TS_flag(); 44 if (CPU->fpu_owner != NULL) 45 CPU->fpu_owner->fpu_context_engaged=1; 46 } 47 } 36 48 37 #endif 49 50 void fpu_lazy_context_save(fpu_context_t *fctx) 51 { 52 /* TODO: We need malloc that allocates on 16-byte boundary !! */ 53 if (((__u64)fctx) & 0xf) 54 fctx = (fpu_context_t *)((((__u64)fctx) | 0xf) + 1); 55 56 __asm__ volatile ( 57 "fxsave %0" 58 : "=m"(*fctx) 59 ); 60 } 61 62 void fpu_lazy_context_restore(fpu_context_t *fctx) 63 { 64 /* TODO: We need malloc that allocates on 16-byte boundary !! */ 65 if (((__u64)fctx) & 0xf) 66 fctx = (fpu_context_t *)((((__u64)fctx) | 0xf) + 1); 67 __asm__ volatile ( 68 "fxrstor %0" 69 : "=m"(*fctx) 70 ); 71 } 72 73 void fpu_init(void) 74 { 75 __asm__ volatile ( 76 "fninit;" 77 ); 78 }
Note:
See TracChangeset
for help on using the changeset viewer.