diff options
Diffstat (limited to 'arch/m68k/fpsp040/sto_res.S')
-rw-r--r-- | arch/m68k/fpsp040/sto_res.S | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/arch/m68k/fpsp040/sto_res.S b/arch/m68k/fpsp040/sto_res.S new file mode 100644 index 000000000000..0cdca3b060ad --- /dev/null +++ b/arch/m68k/fpsp040/sto_res.S | |||
@@ -0,0 +1,98 @@ | |||
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 | | THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA | ||
23 | | The copyright notice above does not evidence any | ||
24 | | actual or intended publication of such source code. | ||
25 | |||
26 | STO_RES: |idnt 2,1 | Motorola 040 Floating Point Software Package | ||
27 | |||
28 | |||
29 | |section 8 | ||
30 | |||
31 | #include "fpsp.h" | ||
32 | |||
33 | .global sto_cos | ||
34 | sto_cos: | ||
35 | bfextu CMDREG1B(%a6){#13:#3},%d0 |extract cos destination | ||
36 | cmpib #3,%d0 |check for fp0/fp1 cases | ||
37 | bles c_fp0123 | ||
38 | fmovemx %fp1-%fp1,-(%a7) | ||
39 | moveql #7,%d1 | ||
40 | subl %d0,%d1 |d1 = 7- (dest. reg. no.) | ||
41 | clrl %d0 | ||
42 | bsetl %d1,%d0 |d0 is dynamic register mask | ||
43 | fmovemx (%a7)+,%d0 | ||
44 | rts | ||
45 | c_fp0123: | ||
46 | cmpib #0,%d0 | ||
47 | beqs c_is_fp0 | ||
48 | cmpib #1,%d0 | ||
49 | beqs c_is_fp1 | ||
50 | cmpib #2,%d0 | ||
51 | beqs c_is_fp2 | ||
52 | c_is_fp3: | ||
53 | fmovemx %fp1-%fp1,USER_FP3(%a6) | ||
54 | rts | ||
55 | c_is_fp2: | ||
56 | fmovemx %fp1-%fp1,USER_FP2(%a6) | ||
57 | rts | ||
58 | c_is_fp1: | ||
59 | fmovemx %fp1-%fp1,USER_FP1(%a6) | ||
60 | rts | ||
61 | c_is_fp0: | ||
62 | fmovemx %fp1-%fp1,USER_FP0(%a6) | ||
63 | rts | ||
64 | |||
65 | |||
66 | .global sto_res | ||
67 | sto_res: | ||
68 | bfextu CMDREG1B(%a6){#6:#3},%d0 |extract destination register | ||
69 | cmpib #3,%d0 |check for fp0/fp1 cases | ||
70 | bles fp0123 | ||
71 | fmovemx %fp0-%fp0,-(%a7) | ||
72 | moveql #7,%d1 | ||
73 | subl %d0,%d1 |d1 = 7- (dest. reg. no.) | ||
74 | clrl %d0 | ||
75 | bsetl %d1,%d0 |d0 is dynamic register mask | ||
76 | fmovemx (%a7)+,%d0 | ||
77 | rts | ||
78 | fp0123: | ||
79 | cmpib #0,%d0 | ||
80 | beqs is_fp0 | ||
81 | cmpib #1,%d0 | ||
82 | beqs is_fp1 | ||
83 | cmpib #2,%d0 | ||
84 | beqs is_fp2 | ||
85 | is_fp3: | ||
86 | fmovemx %fp0-%fp0,USER_FP3(%a6) | ||
87 | rts | ||
88 | is_fp2: | ||
89 | fmovemx %fp0-%fp0,USER_FP2(%a6) | ||
90 | rts | ||
91 | is_fp1: | ||
92 | fmovemx %fp0-%fp0,USER_FP1(%a6) | ||
93 | rts | ||
94 | is_fp0: | ||
95 | fmovemx %fp0-%fp0,USER_FP0(%a6) | ||
96 | rts | ||
97 | |||
98 | |end | ||