home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 2 / DATAFILE_PDCD2.iso / utilities2 / desklib / Libraries / WimpSWIs / s / Poll next >
Encoding:
Text File  |  1992-03-04  |  3.8 KB  |  168 lines

  1. ;
  2. ;       Title                  : Wimp Poll
  3. ;       System                 : Wimp Library
  4. ;       Version                : 1.0
  5. ;       Copyright              : (C) John Winters
  6. ;       Date                   : 22nd September, 1991
  7. ;       Author                 : John H. Winters
  8. ;
  9. ;       Function               : Holds polling routines.
  10. ;
  11. ;
  12. ;       Modification history.
  13. ;
  14. ;       Version                : (Reflect in header IDENT)
  15. ;       Date                   : 
  16. ;       Author                 : 
  17. ;       Changes                : 
  18. ;
  19. ;
  20. ;============================================================================
  21. ;
  22. ;  Include files.
  23. ;
  24. ;============================================================================
  25. ;
  26.         GET     h.regdefs
  27.         GET     h.swinos
  28.         GET     h.macros
  29. ;
  30. ;============================================================================
  31. ;
  32. ;  Code.
  33. ;
  34. ;============================================================================
  35. ;
  36.         PREAMBLE
  37.  
  38.         STARTCODE Wimp_CorruptFPStateOnPoll
  39. ;
  40.         LDR     a1, [pc, #L00001c-.-8]
  41.         MOV     a2, #0
  42.         STR     a2, [a1, #0]
  43.         MOVS    pc, lr
  44. L00001c
  45.         DCD     |x$dataseg|
  46.  
  47.         IMPORT  |x$stack_overflow|
  48.         IMPORT  |_kernel_fpavailable|
  49.         ;MPORT  fp_status_save
  50.         IMPORT  |_printf|
  51. ;
  52. ;
  53.         STARTCODE Wimp_Poll
  54. ;
  55.         MOV     ip, sp
  56.         STMFD   sp!, {v1, v2, fp, ip, lr, pc}
  57.         SUB     fp, ip, #4
  58.         CMPS    sp, sl
  59.         BLLT    |x$stack_overflow|
  60. ;
  61. ;  Save the parameters.
  62. ;
  63.         MOV     v2, a1
  64.         MOV     v1, a2
  65. ;
  66. ;  Check whether to save the FP status.
  67. ;
  68.         LDR     a1, [pc, #L00001c-.-8]
  69.         LDR     a1, [a1, #0]
  70.         CMPS    a1, #0
  71.         BLNE    |_kernel_fpavailable|
  72.         CMPNES  a1, #0
  73.         BLNE    fp_status_save
  74. ;
  75. ;  Save a flag indicating whether we saved or not.
  76. ;  Note that the use of lr as a temporary variable precludes this
  77. ;  code running in SVC mode.  
  78. ;
  79.         MOV     lr, a1
  80. ;
  81. ;  Do the poll.
  82. ;
  83.         MOV     a1, v2
  84.         ADD     a2, v1, #4
  85.         SWI     SWI_Wimp_Poll + XOS_Bit
  86.         SUB     a2, a2, #4
  87.         STR     a1, [a2, #0]
  88.         MOVVC   a1, #0
  89.         CMP     lr, #0
  90.         BLNE    fp_status_restore
  91.         LDMDB   fp, {v1, v2, fp, sp, pc}^
  92.  
  93.         STARTCODE Wimp_PollIdle
  94. ;
  95.         MOV     ip, sp
  96.         STMFD   sp!, {v1 - v3, fp, ip, lr, pc}
  97.         SUB     fp, ip, #4
  98.         CMPS    sp, sl
  99.         BLLT    |x$stack_overflow|
  100. ;
  101. ;  Save the parameters.
  102. ;
  103.         MOV     v2, a1
  104.         MOV     v1, a2
  105.         MOV     v3, a3
  106. ;
  107. ;  Check whether to save the fp status.
  108. ;
  109.         LDR     a1, [pc, #L00001c-.-8]
  110.         LDR     a1, [a1, #0]
  111.         CMPS    a1, #0
  112.         BLNE    |_kernel_fpavailable|
  113.         CMPNES  a1, #0
  114.         BLNE    fp_status_save
  115.         MOV     lr, a1
  116.         MOV     a1, v2
  117.         ADD     a2, v1, #4
  118.         MOV     a3, v3
  119.         SWI     SWI_Wimp_PollIdle + XOS_Bit
  120.         CMP     lr, #0
  121.         BLNE    fp_status_restore
  122.         SUB     a2, a2, #4
  123.         STR     a1, [a2, #0]
  124.         MOVVC   a1, #0
  125.         LDMDB   fp, {v1-v3, fp, sp, pc}^
  126.  
  127.  
  128.         STARTCODE Wimp_SaveFPStateOnPoll
  129. ;
  130.         LDR     a1, [pc, #L00001c-.-8]
  131.         MOV     a2, #1
  132.         STR     a2, [a1, #0]
  133.         MOVS    pc, lr
  134.  
  135. fp_status_restore
  136.         MOV     v1, #0
  137.         WFS    v1
  138.         LDFE    f4, [sp, #0]
  139.         LDFE    f5, [sp, #12]
  140.         LDFE    f6, [sp, #24]
  141.         LDFE    f7, [sp, #36]
  142.         ADD     sp, sp, #48
  143.         LDMIA   sp!, {v1}
  144.         WFS    v1
  145.         MOVS    pc, lr
  146.  
  147. fp_status_save
  148.         RFS    a2
  149.         STMDB   sp!, {a2}
  150.         MOV     a2, #0
  151.         WFS    a2
  152.         SUB     sp, sp, #48
  153.         STFE    f4, [sp, #0]
  154.         STFE    f5, [sp, #12]
  155.         STFE    f6, [sp, #24]
  156.         STFE    f7, [sp, #36]
  157.         MOVS    pc, lr
  158.  
  159.     AREA |C$$data|
  160.  
  161. |x$dataseg|
  162.  
  163. save_fp
  164.         DCD     &00000000
  165.  
  166.  
  167.     END
  168.