You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
3.7 KiB
197 lines
3.7 KiB
/* MN10300 Low level FPU management operations
|
|
*
|
|
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
|
|
* Written by David Howells (dhowells@redhat.com)
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public Licence
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the Licence, or (at your option) any later version.
|
|
*/
|
|
#include <asm/cpu-regs.h>
|
|
|
|
###############################################################################
|
|
#
|
|
# void fpu_init_state(void)
|
|
# - initialise the FPU
|
|
#
|
|
###############################################################################
|
|
.globl fpu_init_state
|
|
.type fpu_init_state,@function
|
|
fpu_init_state:
|
|
mov epsw,d0
|
|
or EPSW_FE,epsw
|
|
|
|
#ifdef CONFIG_MN10300_PROC_MN103E010
|
|
nop
|
|
nop
|
|
nop
|
|
#endif
|
|
fmov 0,fs0
|
|
fmov fs0,fs1
|
|
fmov fs0,fs2
|
|
fmov fs0,fs3
|
|
fmov fs0,fs4
|
|
fmov fs0,fs5
|
|
fmov fs0,fs6
|
|
fmov fs0,fs7
|
|
fmov fs0,fs8
|
|
fmov fs0,fs9
|
|
fmov fs0,fs10
|
|
fmov fs0,fs11
|
|
fmov fs0,fs12
|
|
fmov fs0,fs13
|
|
fmov fs0,fs14
|
|
fmov fs0,fs15
|
|
fmov fs0,fs16
|
|
fmov fs0,fs17
|
|
fmov fs0,fs18
|
|
fmov fs0,fs19
|
|
fmov fs0,fs20
|
|
fmov fs0,fs21
|
|
fmov fs0,fs22
|
|
fmov fs0,fs23
|
|
fmov fs0,fs24
|
|
fmov fs0,fs25
|
|
fmov fs0,fs26
|
|
fmov fs0,fs27
|
|
fmov fs0,fs28
|
|
fmov fs0,fs29
|
|
fmov fs0,fs30
|
|
fmov fs0,fs31
|
|
fmov FPCR_INIT,fpcr
|
|
|
|
#ifdef CONFIG_MN10300_PROC_MN103E010
|
|
nop
|
|
nop
|
|
nop
|
|
#endif
|
|
mov d0,epsw
|
|
ret [],0
|
|
|
|
.size fpu_init_state,.-fpu_init_state
|
|
|
|
###############################################################################
|
|
#
|
|
# void fpu_save(struct fpu_state_struct *)
|
|
# - save the fpu state
|
|
# - note that an FPU Operational exception might occur during this process
|
|
#
|
|
###############################################################################
|
|
.globl fpu_save
|
|
.type fpu_save,@function
|
|
fpu_save:
|
|
mov epsw,d1
|
|
or EPSW_FE,epsw /* enable the FPU so we can access it */
|
|
|
|
#ifdef CONFIG_MN10300_PROC_MN103E010
|
|
nop
|
|
nop
|
|
#endif
|
|
mov d0,a0
|
|
fmov fs0,(a0+)
|
|
fmov fs1,(a0+)
|
|
fmov fs2,(a0+)
|
|
fmov fs3,(a0+)
|
|
fmov fs4,(a0+)
|
|
fmov fs5,(a0+)
|
|
fmov fs6,(a0+)
|
|
fmov fs7,(a0+)
|
|
fmov fs8,(a0+)
|
|
fmov fs9,(a0+)
|
|
fmov fs10,(a0+)
|
|
fmov fs11,(a0+)
|
|
fmov fs12,(a0+)
|
|
fmov fs13,(a0+)
|
|
fmov fs14,(a0+)
|
|
fmov fs15,(a0+)
|
|
fmov fs16,(a0+)
|
|
fmov fs17,(a0+)
|
|
fmov fs18,(a0+)
|
|
fmov fs19,(a0+)
|
|
fmov fs20,(a0+)
|
|
fmov fs21,(a0+)
|
|
fmov fs22,(a0+)
|
|
fmov fs23,(a0+)
|
|
fmov fs24,(a0+)
|
|
fmov fs25,(a0+)
|
|
fmov fs26,(a0+)
|
|
fmov fs27,(a0+)
|
|
fmov fs28,(a0+)
|
|
fmov fs29,(a0+)
|
|
fmov fs30,(a0+)
|
|
fmov fs31,(a0+)
|
|
fmov fpcr,d0
|
|
mov d0,(a0)
|
|
#ifdef CONFIG_MN10300_PROC_MN103E010
|
|
nop
|
|
nop
|
|
#endif
|
|
|
|
mov d1,epsw
|
|
ret [],0
|
|
|
|
.size fpu_save,.-fpu_save
|
|
|
|
###############################################################################
|
|
#
|
|
# void fpu_restore(struct fpu_state_struct *)
|
|
# - restore the fpu state
|
|
# - note that an FPU Operational exception might occur during this process
|
|
#
|
|
###############################################################################
|
|
.globl fpu_restore
|
|
.type fpu_restore,@function
|
|
fpu_restore:
|
|
mov epsw,d1
|
|
or EPSW_FE,epsw /* enable the FPU so we can access it */
|
|
|
|
#ifdef CONFIG_MN10300_PROC_MN103E010
|
|
nop
|
|
nop
|
|
#endif
|
|
mov d0,a0
|
|
fmov (a0+),fs0
|
|
fmov (a0+),fs1
|
|
fmov (a0+),fs2
|
|
fmov (a0+),fs3
|
|
fmov (a0+),fs4
|
|
fmov (a0+),fs5
|
|
fmov (a0+),fs6
|
|
fmov (a0+),fs7
|
|
fmov (a0+),fs8
|
|
fmov (a0+),fs9
|
|
fmov (a0+),fs10
|
|
fmov (a0+),fs11
|
|
fmov (a0+),fs12
|
|
fmov (a0+),fs13
|
|
fmov (a0+),fs14
|
|
fmov (a0+),fs15
|
|
fmov (a0+),fs16
|
|
fmov (a0+),fs17
|
|
fmov (a0+),fs18
|
|
fmov (a0+),fs19
|
|
fmov (a0+),fs20
|
|
fmov (a0+),fs21
|
|
fmov (a0+),fs22
|
|
fmov (a0+),fs23
|
|
fmov (a0+),fs24
|
|
fmov (a0+),fs25
|
|
fmov (a0+),fs26
|
|
fmov (a0+),fs27
|
|
fmov (a0+),fs28
|
|
fmov (a0+),fs29
|
|
fmov (a0+),fs30
|
|
fmov (a0+),fs31
|
|
mov (a0),d0
|
|
fmov d0,fpcr
|
|
#ifdef CONFIG_MN10300_PROC_MN103E010
|
|
nop
|
|
nop
|
|
nop
|
|
#endif
|
|
|
|
mov d1,epsw
|
|
ret [],0
|
|
|
|
.size fpu_restore,.-fpu_restore
|
|
|