home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / c68k_src / lib.sa < prev    next >
Encoding:
Text File  |  1987-12-10  |  1.4 KB  |  67 lines

  1.  
  2.     SECTION    8
  3. *
  4. *    C$LMUL    LONG SIGNED MULTIPLY
  5. *
  6. *    MULTIPLIES TWO LONG OPERANDS ON THE STACK AND RETURNS THE
  7. *    RESULT ON THE STACK WITH NO GARBAGE.
  8. *
  9.     XDEF    C$LMUL
  10. C$LMUL:
  11.     MOVEM.L    D0-D3,-(A7)        *SAVE REGISTERS
  12.     MOVE.L    20(A7),D0        *GET PARAMETER 1
  13.     MOVE.W    D0,D2
  14.     MOVE.W    D0,D1
  15.     EXT.L    D1
  16.     SWAP    D1
  17.     SWAP    D0
  18.     SUB.W    D0,D1
  19.     MOVE.W    26(A7),D0        *GET MSW OF PARAMETER 2
  20.     MOVE.W    D0,D3
  21.     EXT.L    D3
  22.     SWAP    D3
  23.     SUB.L    24(A7),D3        *SUBTRACT LSW OF PARAMETER 2
  24.     MULS    D0,D1
  25.     MULS    D2,D3
  26.     ADD.W    D1,D3
  27.     MULS    D2,D0
  28.     SWAP    D0
  29.     SUB.W    D3,D0
  30.     SWAP    D0
  31.     MOVE.L    D0,24(A7)
  32.     MOVE.L    16(A7),20(A7)        *MOVE RETURN ADDRESS
  33.     MOVEM.L    (A7)+,D0-D3        *RESTORE REGISTERS
  34.     ADD.W    #4,A7            *ADJUST STACK
  35.     RTS
  36. *
  37. *    C$SWITCH - EXECUTE C SWITCH STATEMENT
  38. *
  39. *    THE SWITCH TABLE IS ENCODED AS FOLLOWS:
  40. *
  41. *        LONG    LABEL1,CASE1
  42. *        LONG    LABEL2,CASE2
  43. *        LONG    LABEL3,CASE3
  44. *        ... FOR ALL CASES
  45. *        LONG    0,DEFAULTCASE
  46. *
  47. *    THE CASE VARIABLE IS PASSED IN D0
  48. *
  49.     XDEF    C$SWITCH
  50. C$SWITCH:
  51.     MOVE.L    (A7)+,A0        *GET TABLE ADDRESS
  52. C$SW1:
  53.     MOVE.L    (A0)+,A1        *GET A LABEL
  54.     MOVE.L    A1,D1            *TEST IT FOR DEFAULT
  55.     BEQ    C$SW2            *JUMP IF DEFAULT CASE
  56.     CMP.L    (A0)+,D0        *SEE IF THIS CASE
  57.     BNE    C$SW1            *NEXT CASE IF NOT
  58.     JMP    (A1)            *JUMP TO CASE
  59. C$SW2:
  60.     MOVE.L    (A0),A0        *GET DEFAULT ADDRESS
  61.     JMP    (A0)            *JUMP TO DEFAULT CASE
  62.  
  63.     END
  64.  
  65. Test:: ə
  66.     JMP    (A1)            *JUMP TO CASE
  67. C$SW2:
  68.     MOVE.L    (A0),A0        *GET DEFAULT ADDRESS
  69.     JMP    (A0)            *JUMP TO DEFAUL