m68k: Implement ndelay() based on the existing udelay() logic
[linux-3.10.git] / arch / m68k / fpsp040 / sto_res.S
1 |
2 |       sto_res.sa 3.1 12/10/90
3 |
4 |       Takes the result and puts it in where the user expects it.
5 |       Library functions return result in fp0. If fp0 is not the
6 |       users destination register then fp0 is moved to the
7 |       correct floating-point destination register.  fp0 and fp1
8 |       are then restored to the original contents.
9 |
10 |       Input:  result in fp0,fp1
11 |
12 |               d2 & a0 should be kept unmodified
13 |
14 |       Output: moves the result to the true destination reg or mem
15 |
16 |       Modifies: destination floating point register
17 |
18
19 |               Copyright (C) Motorola, Inc. 1990
20 |                       All Rights Reserved
21 |
22 |       For details on the license for this file, please see the
23 |       file, README, in this same directory.
24
25 STO_RES:        |idnt   2,1 | Motorola 040 Floating Point Software Package
26
27
28         |section        8
29
30 #include "fpsp.h"
31
32         .global sto_cos
33 sto_cos:
34         bfextu          CMDREG1B(%a6){#13:#3},%d0       |extract cos destination
35         cmpib           #3,%d0          |check for fp0/fp1 cases
36         bles            c_fp0123
37         fmovemx %fp1-%fp1,-(%a7)
38         moveql          #7,%d1
39         subl            %d0,%d1         |d1 = 7- (dest. reg. no.)
40         clrl            %d0
41         bsetl           %d1,%d0         |d0 is dynamic register mask
42         fmovemx (%a7)+,%d0
43         rts
44 c_fp0123:
45         cmpib           #0,%d0
46         beqs            c_is_fp0
47         cmpib           #1,%d0
48         beqs            c_is_fp1
49         cmpib           #2,%d0
50         beqs            c_is_fp2
51 c_is_fp3:
52         fmovemx %fp1-%fp1,USER_FP3(%a6)
53         rts
54 c_is_fp2:
55         fmovemx %fp1-%fp1,USER_FP2(%a6)
56         rts
57 c_is_fp1:
58         fmovemx %fp1-%fp1,USER_FP1(%a6)
59         rts
60 c_is_fp0:
61         fmovemx %fp1-%fp1,USER_FP0(%a6)
62         rts
63
64
65         .global sto_res
66 sto_res:
67         bfextu          CMDREG1B(%a6){#6:#3},%d0        |extract destination register
68         cmpib           #3,%d0          |check for fp0/fp1 cases
69         bles            fp0123
70         fmovemx %fp0-%fp0,-(%a7)
71         moveql          #7,%d1
72         subl            %d0,%d1         |d1 = 7- (dest. reg. no.)
73         clrl            %d0
74         bsetl           %d1,%d0         |d0 is dynamic register mask
75         fmovemx (%a7)+,%d0
76         rts
77 fp0123:
78         cmpib           #0,%d0
79         beqs            is_fp0
80         cmpib           #1,%d0
81         beqs            is_fp1
82         cmpib           #2,%d0
83         beqs            is_fp2
84 is_fp3:
85         fmovemx %fp0-%fp0,USER_FP3(%a6)
86         rts
87 is_fp2:
88         fmovemx %fp0-%fp0,USER_FP2(%a6)
89         rts
90 is_fp1:
91         fmovemx %fp0-%fp0,USER_FP1(%a6)
92         rts
93 is_fp0:
94         fmovemx %fp0-%fp0,USER_FP0(%a6)
95         rts
96
97         |end