Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | | | |
e00d82d0 MW |
22 | | For details on the license for this file, please see the |
23 | | file, README, in this same directory. | |
1da177e4 LT |
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 |