aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68k/fpsp040/sto_res.S
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
commit1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch)
tree0bba044c4ce775e45a88a51686b5d9f90697ea9d /arch/m68k/fpsp040/sto_res.S
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
Diffstat (limited to 'arch/m68k/fpsp040/sto_res.S')
-rw-r--r--arch/m68k/fpsp040/sto_res.S98
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
26STO_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
34sto_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
45c_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
52c_is_fp3:
53 fmovemx %fp1-%fp1,USER_FP3(%a6)
54 rts
55c_is_fp2:
56 fmovemx %fp1-%fp1,USER_FP2(%a6)
57 rts
58c_is_fp1:
59 fmovemx %fp1-%fp1,USER_FP1(%a6)
60 rts
61c_is_fp0:
62 fmovemx %fp1-%fp1,USER_FP0(%a6)
63 rts
64
65
66 .global sto_res
67sto_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
78fp0123:
79 cmpib #0,%d0
80 beqs is_fp0
81 cmpib #1,%d0
82 beqs is_fp1
83 cmpib #2,%d0
84 beqs is_fp2
85is_fp3:
86 fmovemx %fp0-%fp0,USER_FP3(%a6)
87 rts
88is_fp2:
89 fmovemx %fp0-%fp0,USER_FP2(%a6)
90 rts
91is_fp1:
92 fmovemx %fp0-%fp0,USER_FP1(%a6)
93 rts
94is_fp0:
95 fmovemx %fp0-%fp0,USER_FP0(%a6)
96 rts
97
98 |end