Changeset 3396f59 in mainline for arch/amd64/src/fpu_context.c


Ignore:
Timestamp:
2005-09-04T08:28:55Z (20 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8ff2f3f
Parents:
005384ad
Message:

Fixed gdtr naming issues after ia32 changes.
Fixed stack alignment on new thread to by multiple of 16,
we are now ABI-correct and we do not #GP on va_arg to boot.
Fixed bad exception register names reporting.
Fixed bad _hardcoded_load_addr, which caused allocation of kernel text
frames.

File:
1 moved

Legend:

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

    r005384ad r3396f59  
    11/*
    2  * Copyright (C) 2005 Martin Decky
     2 * Copyright (C) 2005 Jakub Vana
    33 * All rights reserved.
    44 *
     
    2525 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    2626 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 *
    2728 */
    2829
    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>
    3133
    32 #include <arch/types.h>
     34void fpu_context_save(fpu_context_t *fctx)
     35{
     36}
    3337
    34 struct fpu_context {
    35 };
     38void 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}
    3648
    37 #endif
     49
     50void 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
     62void 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
     73void fpu_init(void)
     74{
     75        __asm__ volatile (
     76                "fninit;"
     77        );
     78}
Note: See TracChangeset for help on using the changeset viewer.