root/arch/m68k/fpsp040/sto_res.S

/* [previous][next][first][last][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 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

/* [previous][next][first][last][top][bottom][index][help] */