home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / t3_1 / nexttsrc.lha / nexttsources / sources / comp / assembler / vaxis.t < prev    next >
Encoding:
Text File  |  1988-02-05  |  7.4 KB  |  202 lines

  1. (herald vaxis)
  2.  
  3. ;;; Copyright (c) 1985 Yale University
  4. ;;;     Authors: N Adams, R Kelsey, D Kranz, J Philbin, J Rees.
  5. ;;; This material was developed by the T Project at the Yale University Computer 
  6. ;;; Science Department.  Permission to copy this software, to redistribute it, 
  7. ;;; and to use it for any purpose is granted, subject to the following restric-
  8. ;;; tions and understandings.
  9. ;;; 1. Any copy made of this software must include this copyright notice in full.
  10. ;;; 2. Users of this software agree to make their best efforts (a) to return
  11. ;;;    to the T Project at Yale any improvements or extensions that they make,
  12. ;;;    so that these may be included in future releases; and (b) to inform
  13. ;;;    the T Project of noteworthy uses of this software.
  14. ;;; 3. All materials developed as a consequence of the use of this software
  15. ;;;    shall duly acknowledge such use, in accordance with the usual standards
  16. ;;;    of acknowledging credit in academic research.
  17. ;;; 4. Yale has made no warrantee or representation that the operation of
  18. ;;;    this software will be error-free, and Yale is under no obligation to
  19. ;;;    provide any services, by way of maintenance, update, or otherwise.
  20. ;;; 5. In conjunction with products arising from the use of this material,
  21. ;;;    there shall be no use of the name of the Yale University nor of any
  22. ;;;    adaptation thereof in any advertising, promotional, or sales literature
  23. ;;;    without prior written consent from Yale in each case.
  24. ;;;
  25.  
  26. (define-local-syntax (define-vax-instructions . ispecs)
  27.   (labels
  28.     (((process-context opspecs)
  29.       (map (lambda (os)
  30.              (cond ((symbol? (cadr os))
  31.                     (cond ((eq? (cadr os) 'bb) 8)
  32.                           ((eq? (cadr os) 'bw) 16)
  33.                           (else (concatenate-symbol '*vax$ (cadr os) '*))))
  34.                    (else 
  35.                     (cadr os))))
  36.            opspecs))
  37.  
  38.     ((vaxi-procedure-name vars)
  39.       (cond ((memq? 'displ vars)
  40.              (let ((len (length vars)))
  41.                (cond ((fx= len 1) 'vax$disp)
  42.                      (else (concatenate-symbol 'vax$ (fx- len 1) 'op-disp)))))
  43.             (else
  44.              (concatenate-symbol 'vax$ (length vars) 'op))))
  45.  
  46.     ((process-vaxi opcode mnemonic opspecs)
  47.       (if (fx> opcode 255) (error "define-vaxi - opcode ~s too big" opcode))
  48.       (let ((vars (map car opspecs))
  49.             (contexts (process-context opspecs)))
  50.         (let ((parms (apply append! (map list vars contexts)))
  51.               (proc-name (vaxi-procedure-name vars)))
  52.           `(let ((proc (lambda ,vars (,proc-name 
  53.                                        ,(vax-mnemonic mnemonic)
  54.                                        ,opcode 
  55.                                        ,@parms))))     
  56.               (define ,(concatenate-symbol 'vax/ mnemonic) proc)
  57.               (*define-lap *vax-machine* ',mnemonic proc))
  58.           )))
  59.  
  60.     ((vax-mnemonic m)
  61.         (let ((dest (copy-string "       "))
  62.               (source (symbol->string m)))
  63.           (string-downcase! 
  64.            (string-replace dest source (string-length source))))))
  65.  
  66.  
  67.     `(block
  68.       ,@(iterate loop ((ispecs ispecs) (is '()))
  69.           (cond ((null? ispecs) is)
  70.                 (else
  71.                  (let ((ispec (car ispecs)))
  72.                    (loop (cdr ispecs)
  73.                          (cons (process-vaxi (cadr ispec) (car ispec) (cddr ispec))
  74.                                is)))))))
  75.  
  76.     ))
  77.            
  78. (define-vax-instructions            
  79.   (ADDD2 #x60 (add rd) (sum md))
  80.   (ADDD3 #x61 (add1 rd) (add2 rd) (sum wd))
  81.   (ADDB2 #x80 (add rb) (sum mb))
  82.   (ADDB3 #x81 (add1 rb) (add2 rb) (sum wb))
  83.   (ADDL2 #xC0 (add rl) (sum ml))
  84.   (ADDL3 #xC1 (add1 rl) (add2 rl) (sum wl))
  85.   (ADDW2 #xA0 (add rw) (sum mw))
  86.   (ADDW3 #xA1 (add1 rw) (add2 rw) (sum ww))
  87.   (AOBLEQ #xF3 (limit rl) (index ml) (displ bb))
  88.   (AOBLSS #xF2 (limit rl) (index ml) (displ bb))
  89.   (ASHL #x78 (cnt rb) (src rl) (dst wl))
  90.   (ASHQ #x79 (cnt rb) (src rq) (dst wq))
  91.   (BBC #xE1 (pos rl) (base vb) (displ bb))
  92.   (BBS #xE0 (pos rl) (base vb) (displ bb))
  93.   (BCC #x1E (displ bb))
  94.   (BCS #x1F (displ bb))
  95.   (BEQL #x13 (displ bb))
  96.   (BEQLU #x13 (displ bb))
  97.   (BGEQ #x18 (displ bb))
  98.   (BGEQU #x1E (displ bb))
  99.   (BGTR #x14 (displ bb))
  100.   (BGTRU #x1A (displ bb))
  101.   (BICB2 #x8A (mask rb) (dst mb))
  102.   (BICB3 #x8B (mask rb) (src rb) (dst wb))
  103.   (BICL2 #xCA (mask rl) (dst ml))
  104.   (BICL3 #xCB (mask rl) (src rl) (dst wl))
  105.   (BICW2 #xAA (mask rw) (dst mw))
  106.   (BICW3 #xAB (mask rw) (src rw) (dst ww))
  107.   (BISB2 #x88 (mask rb) (dst mb))
  108.   (BISB3 #x89 (mask rb) (src rb) (dst wb))
  109.   (BISL2 #xC8 (mask rl) (dst ml))
  110.   (BISL3 #xC9 (mask rl) (src rl) (dst wl))
  111.   (BISW2 #xA8 (mask rw) (dst mw))
  112.   (BISW3 #xA9 (mask rw) (src rw) (dst ww))
  113.   (BITL #xD3 (mask rl) (src rl))
  114.   (BITB #x93 (mask rb) (src rb))
  115.   (BLEQ #x15 (displ bb))
  116.   (BLEQU #x1B (displ bb))
  117.   (BLSS #x19 (displ bb))
  118.   (BLSSU #x1F (displ bb))
  119.   (BNEQ #x12 (displ bb))
  120.   (BNEQU #x12 (displ bb))
  121.   (BPT #x03)
  122.   (BRB #x11 (displ bb))
  123.   (BRW #x31 (displ bw))
  124.   (BVC #x1C (displ bb))
  125.   (BVS #x1D (displ bb))
  126.   (CALLG #xFA (arglist ab) (dst ab))
  127.   (CALLS #xFB (numarg rl) (dst ab))
  128.   (CLRL #xD4 (dst wl))
  129.   (CLRQ #x7C (dst wq))
  130.   (CMPB #x91 (src1 rb) (src2 rb))
  131.   (CMPD #x71 (src1 rd) (src2 rd))
  132.   (CMPL #xD1 (src1 rl) (src2 rl))
  133.   (CMPW #xB1 (src1 rw) (src2 rw))
  134.   (CMPZV #xED (pos rl) (size rb) (base vb) (src rl))
  135.   (CVTBL #x98 (src rb) (dst wl))
  136.   (CVTBW #x99 (src rb) (dst ww))
  137.   (CVTWL #x32 (src rw) (dst wl))
  138.   (DECL #xD7 (dif ml))
  139.   (DIVB2 #x86 (divr rb) (quo mb))
  140.   (DIVB3 #x87 (divr rb) (divd rb) (quo wb))
  141.   (DIVD2 #x66 (divr rd) (quo md))
  142.   (DIVD3 #x67 (divr rd) (divd rd) (quo wd))
  143.   (DIVL2 #xC6 (divr rl) (quo ml))
  144.   (DIVL3 #xC7 (divr rl) (divd rl) (quo wl))
  145.   (DIVW2 #xA6 (divr rw) (quo mw))
  146.   (DIVW3 #xA7 (divr rw) (divd rw) (quo ww))
  147.   (EDIV #x7B (divr rl) (divd rq) (quo wl) (rem wl))
  148.   (EMODF #x54 (mulr rf) (mulrx rb) (muld rf) (int wl) (fract wf))
  149.   (INCL #xD6 (sum ml))
  150.   (JMP #x17 (dst ab))
  151.   (JSB #x16 (dst ab))
  152.   (MCOML #xD2 (src rl) (dst wl))
  153.   (MNEGD #x72 (src rd) (dst wd))
  154.   (MNEGL #xCE (src rl) (dst wl))
  155.   (MOVAB #x9E (src ab) (dst wl))
  156.   (MOVAD #x7E (src ad) (dst wd))
  157.   (MOVAL #xDE (src al) (dst wl))
  158.   (MOVB #x90 (src rb) (dst wb))
  159.   (MOVD #x70 (src rd) (dst wd))
  160.   (MOVL #xD0 (src rl) (dst wl))
  161.   (MOVW #xB0 (src rw) (dst ww))
  162.   (MOVZBL #x9A (src rb) (dst wl))
  163.   (MOVZBW #x9B (src rb) (dst ww))
  164.   (MOVZWL #x3C (src rw) (dst wl))
  165.   (MULB2 #x84 (mulr rb) (prod mb))
  166.   (MULB3 #x85 (mulr rb) (muld rb) (prod wb))
  167.   (MULD2 #x64 (mulr rd) (prod md))
  168.   (MULD3 #x65 (mulr rd) (muld rd) (prod wd))
  169.   (MULL2 #xC4 (mulr rl) (prod ml))
  170.   (MULL3 #xC5 (mulr rl) (muld rl) (prod wl))
  171.   (MULW2 #xA4 (mulr rw) (prod mw))
  172.   (MULW3 #xA5 (mulr rw) (muld rw) (prod ww))
  173.   (POPR #xBA (mask rw))
  174.   (PUSHAD #x7F (src ad))
  175.   (PUSHAL #xDF (src al))
  176.   (PUSHL #xDD (src rl))
  177.   (PUSHR #xBB (mask rw))
  178.   (RET #x04)
  179.   (ROTL #x9C (cnt rb) (src rl) (dst wl))
  180.   (RSB #x05)
  181.   (SOBGEQ #xF4 (index ml) (displ bb))
  182.   (SOBGTR #xF5 (index ml) (displ bb))
  183.   (SUBB2 #x82 (sub rb) (dif mb))
  184.   (SUBB3 #x83 (sub rb) (min rb) (dif wb))
  185.   (SUBD2 #x62 (sub rd) (dif md))
  186.   (SUBD3 #x63 (sub rd) (min rd) (dif wd))
  187.   (SUBL2 #xC2 (sub rl) (dif ml))
  188.   (SUBL3 #xC3 (sub rl) (min rl) (dif wl))
  189.   (SUBW2 #xA2 (sub rw) (dif mw))
  190.   (SUBW3 #xA3 (sub rw) (min rw) (dif ww))
  191.   (TSTD #x73 (src rd))
  192.   (TSTL #xD5 (src rl))
  193.   (TSTB #x95 (src rb))
  194.   (XORB2 #x8C (mask rb) (dst mb))
  195.   (XORB3 #x8D (mask rb) (src rb) (dst wb))
  196.   (XORL2 #xCC (mask rl) (dst ml))
  197.   (XORL3 #xCD (mask rl) (src rl) (dst wl))
  198.   (XORW2 #xAC (mask rw) (dst mw))
  199.   (XORW3 #xAD (mask rw) (src rw) (dst ww))
  200.   )
  201.  
  202.