sto_res.s
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:2k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* sto_res.s - Motorola 68040 FP result storage routines (EXC) */
  2. /* Copyright 1991-1993 Wind River Systems, Inc. */
  3. .data
  4. .globl _copyright_wind_river
  5. .long _copyright_wind_river
  6. /*
  7. modification history
  8. --------------------
  9. 01e,21jul93,kdl  added .text (SPR #2372).
  10. 01d,23aug92,jcf  changed bxxx to jxx.
  11. 01c,26may92,rrr  the tree shuffle
  12. 01b,10jan92,kdl  added modification history; general cleanup.
  13. 01a,15aug91,kdl  original version, from Motorola FPSP v2.0.
  14. */
  15. /*
  16. DESCRIPTION
  17. sto_ressa 3.1 12/10/90
  18. Takes the result and puts it in where the user expects it.
  19. Library functions return result in fp0. If fp0 is not the
  20. users destination register then fp0 is moved to the the
  21. correct floating-point destination register.  fp0 and fp1
  22. are then restored to the original contents.
  23. Input: result in fp0,fp1
  24. d2 # a0 should be kept unmodified
  25. Output: moves the result to the true destination reg or mem
  26. Modifies: destination floating point register
  27. Copyright (C) Motorola, Inc. 1990
  28. All Rights Reserved
  29. THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
  30. The copyright notice above does not evidence any
  31. actual or intended publication of such source code.
  32. STO_RES idnt 2,1 Motorola 040 Floating Point Software Package
  33. section 8
  34. NOMANUAL
  35. */
  36. #include "fpsp040E.h"
  37. .text
  38. .globl __x_sto_cos
  39. __x_sto_cos:
  40. bfextu a6@(CMDREG1B){#13:#3},d0 | extract cos destination
  41. cmpib #3,d0 | check for fp0/fp1 cases
  42. jle  c_fp0123
  43. fmovemx fp1-fp1,a7@-
  44. moveql #7,d1
  45. subl d0,d1 | d1 = 7- (dest. reg. no.)
  46. clrl d0
  47. bset d1,d0 | d0 is dynamic register mask
  48. fmovemx a7@+,d0
  49. rts
  50. c_fp0123:
  51. cmpib #0,d0
  52. jeq  c_is_fp0
  53. cmpib #1,d0
  54. jeq  c_is_fp1
  55. cmpib #2,d0
  56. jeq  c_is_fp2
  57. c_is_fp3:
  58. fmovemx fp1-fp1,a6@(USER_FP3)
  59. rts
  60. c_is_fp2:
  61. fmovemx fp1-fp1,a6@(USER_FP2)
  62. rts
  63. c_is_fp1:
  64. fmovemx fp1-fp1,a6@(USER_FP1)
  65. rts
  66. c_is_fp0:
  67. fmovemx fp1-fp1,a6@(USER_FP0)
  68. rts
  69. .globl __x_sto_res
  70. __x_sto_res:
  71. bfextu a6@(CMDREG1B){#6:#3},d0 | extract destination register
  72. cmpib #3,d0 | check for fp0/fp1 cases
  73. jle  fp0123
  74. fmovemx fp0-fp0,a7@-
  75. moveql #7,d1
  76. subl d0,d1 | d1 = 7- (dest. reg. no.)
  77. clrl d0
  78. bset d1,d0 | d0 is dynamic register mask
  79. fmovemx a7@+,d0
  80. rts
  81. fp0123:
  82. cmpib #0,d0
  83. jeq  is_fp0
  84. cmpib #1,d0
  85. jeq  is_fp1
  86. cmpib #2,d0
  87. jeq  is_fp2
  88. is_fp3:
  89. fmovemx fp0-fp0,a6@(USER_FP3)
  90. rts
  91. is_fp2:
  92. fmovemx fp0-fp0,a6@(USER_FP2)
  93. rts
  94. is_fp1:
  95. fmovemx fp0-fp0,a6@(USER_FP1)
  96. rts
  97. is_fp0:
  98. fmovemx fp0-fp0,a6@(USER_FP0)
  99. rts
  100. | end