root/arch/m68k/fpsp040/sto_res.S

/* [<][>][^][v][top][bottom][index][help] */
   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

/* [<][>][^][v][top][bottom][index][help] */