Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | | |
Matt Waddel | e00d82d | 2006-02-11 17:55:48 -0800 | [diff] [blame] | 22 | | For details on the license for this file, please see the |
| 23 | | file, README, in this same directory. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |