home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / g / gnu_c / pmlsrc23.zoo / pmlsrc / cerr.cpp < prev    next >
Encoding:
Text File  |  1994-03-19  |  2.7 KB  |  131 lines

  1. #APP
  2.  
  3. | mjr: complex error checking code
  4. |    inputs:
  5. |    a1:    pointer to double
  6. |    a7@(4):    pointer to funcname
  7.  
  8. .text
  9. .even
  10.  
  11. .globl c_err_check
  12. .even
  13.  
  14. c_err_check:
  15.     movew    a1@,d1        | get z.real
  16.     cmpiw    #0x7fff,d1    | == NaN ?
  17.     beq    error_nan    |
  18.     cmpiw    #0x7ff0,d1    | == + Infinity ?
  19.     beq    error_plus    |
  20.     cmpiw    #0xfff0,d1    | == - Infinity ?
  21.     beq    error_minus    |
  22. continue:
  23.     movew    a1@(8),d1    | get z.imag
  24.     cmpiw    #0x7fff,d1    | == NaN ?
  25.     beq    error_nan_i    |
  26.     cmpiw    #0x7ff0,d1    | == + Infinity ?
  27.     beq    error_plus_i    |
  28.     cmpiw    #0xfff0,d1    | == - Infinity ?
  29.     beq    error_minus_i    |
  30.  
  31.     addqw    #4,a7        | drop _funcname
  32.     rts
  33.  
  34. #ifndef    __MSHORT__
  35. error_minus:
  36.     moveml    d0/a1,a7@-
  37.     movel    #63,_errno    | errno = ERANGE
  38.     pea    Overflow    | for printf
  39.     bra    error_exit    |
  40. error_plus:
  41.     moveml    d0/a1,a7@-
  42.     movel    #63,_errno    | NAN => errno = EDOM
  43.     pea    Overflow    | for printf
  44.     bra    error_exit    |
  45. error_nan:
  46.     moveml    d0/a1,a7@-
  47.     lea    __infinitydf,a0
  48.     movel    a0@,a1@        | result = + Infinity (for now)
  49.     movel    a0@(4),a1@(4)    | result = + Infinity (for now)
  50.     movel    #62,_errno    | NAN => errno = EDOM
  51.     pea    Domain        | for printf
  52. #else    __MSHORT__
  53. error_minus:
  54.     moveml    d0/a1,a7@-
  55.     movew    #63,_errno    | errno = ERANGE
  56.     pea    Overflow    | for printf
  57.     bra    error_exit    |
  58. error_plus:
  59.     moveml    d0/a1,a7@-
  60.     movew    #63,_errno    | NAN => errno = EDOM
  61.     pea    Overflow    | for printf
  62.     bra    error_exit    |
  63. error_nan:
  64.     moveml    d0/a1,a7@-
  65.     lea    __infinitydf,a0
  66.     movel    a0@,a1@        | result = + Infinity (for now)
  67.     movel    a0@(4),a1@(4)    | result = + Infinity (for now)
  68.     movew    #62,_errno    | NAN => errno = EDOM
  69.     pea    Domain        | for printf
  70. #endif    __MSHORT__
  71. error_exit:
  72.     pea    __iob+52    |
  73.     jbsr    _fprintf    |
  74.     addqw    #8,a7        | leave _funcname on stack
  75.     moveml    a7@+,d0/a1
  76.     bra    continue
  77.  
  78. #ifndef __MSHORT__
  79. error_minus_i:
  80.     moveml    d0/a1,a7@-
  81.     movel    #63,_errno    | errno = ERANGE
  82.     pea    Overflow    | for printf
  83.     bra    error_exit_i    |
  84. error_plus_i:
  85.     moveml    d0/a1,a7@-
  86.     movel    #63,_errno    | NAN => errno = EDOM
  87.     pea    Overflow    | for printf
  88.     bra    error_exit_i    |
  89. error_nan_i:
  90.     moveml    d0/a1,a7@-
  91.     lea    __infinitydf,a0
  92.     movel    a0@,a1@(8)    | result = + Infinity (for now)
  93.     movel    a0@(4),a1@(12)    | result = + Infinity (for now)
  94.     movel    #62,_errno    | NAN => errno = EDOM
  95.     pea    Domain        | for printf
  96. #else __MSHORT__
  97. error_minus_i:
  98.     moveml    d0/a1,a7@-
  99.     movew    #63,_errno    | errno = ERANGE
  100.     pea    Overflow    | for printf
  101.     bra    error_exit_i    |
  102. error_plus_i:
  103.     moveml    d0/a1,a7@-
  104.     movew    #63,_errno    | NAN => errno = EDOM
  105.     pea    Overflow    | for printf
  106.     bra    error_exit_i    |
  107. error_nan_i:
  108.     moveml    d0/a1,a7@-
  109.     lea    __infinitydf,a0
  110.     movel    a0@,a1@(8)    | result = + Infinity (for now)
  111.     movel    a0@(4),a1@(12)    | result = + Infinity (for now)
  112.     movew    #62,_errno    | NAN => errno = EDOM
  113.     pea    Domain        | for printf
  114. #endif __MSHORT__
  115.  
  116. error_exit_i:
  117.     pea    __iob+52    |
  118.     jbsr    _fprintf    |
  119.     addqw    #8,a7        |
  120.     moveml    a7@+,d0/a1
  121.  
  122.     rts
  123. .data
  124. .even
  125. Overflow:
  126.     .ascii    ": Overflow\n\0"
  127.     .even
  128. Domain:
  129.     .ascii    ": Domain error\n\0"
  130.     .even
  131.