Changeset 3b05862f in mainline for arch/ia32/src/fpu_context.c


Ignore:
Timestamp:
2006-03-15T16:12:37Z (19 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2f7342d
Parents:
b629483
Message:

ia32 MMX and SSEx support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ia32/src/fpu_context.c

    rb629483 r3b05862f  
    3232#include <cpu.h>
    3333
    34 void fpu_context_save(fpu_context_t *fctx)
     34typedef void (*fpu_context_function)(fpu_context_t *fctx);
     35
     36static fpu_context_function fpu_save,fpu_restore;
     37
     38
     39
     40static void fpu_context_f_save(fpu_context_t *fctx)
    3541{
    3642        __asm__ volatile (
     
    4046}
    4147
    42 
    43 void fpu_context_restore(fpu_context_t *fctx)
     48static void fpu_context_f_restore(fpu_context_t *fctx)
    4449{
    4550        __asm__ volatile (
     
    4954}
    5055
     56static void fpu_context_fx_save(fpu_context_t *fctx)
     57{
     58        __asm__ volatile (
     59                "fxsave %0"
     60                : "=m"(*fctx)
     61                );
     62}
     63
     64static void fpu_context_fx_restore(fpu_context_t *fctx)
     65{
     66        __asm__ volatile (
     67                "fxrstor %0"
     68                : "=m"(*fctx)
     69                );
     70}
     71
     72/*
     73        Setup using fxsr instruction
     74*/
     75void fpu_fxsr(void)
     76{
     77        fpu_save=fpu_context_fx_save;
     78        fpu_restore=fpu_context_fx_restore;
     79}
     80/*
     81        Setup using not fxsr instruction
     82*/
     83void fpu_fsr(void)
     84{
     85        fpu_save=fpu_context_f_save;
     86        fpu_restore=fpu_context_f_restore;
     87}
     88
     89
     90
     91void fpu_context_save(fpu_context_t *fctx)
     92{
     93        fpu_save(fctx);
     94}
     95
     96void fpu_context_restore(fpu_context_t *fctx)
     97{
     98        fpu_restore(fctx);
     99}
     100
     101
     102
    51103void fpu_init()
    52104{
     105        __u32 help0=0,help1=0;
    53106        __asm__ volatile (
    54                 "fninit;"
     107                "fninit;\n"
     108                "stmxcsr %0\n"
     109                "mov %0,%1;\n"
     110                "or %2,%1;\n"
     111                "mov %1,%0;\n"
     112                "ldmxcsr %0;\n"
     113                :"+m"(help0),"+r"(help1)
     114                :"i"(0x1f80)
    55115        );
    56116}
Note: See TracChangeset for help on using the changeset viewer.