Ignore:
Timestamp:
May 27, 2010, 11:50:14 PM (9 years ago)
Author:
gb
Message:

Keep moving forward. Can -almost- compile simple functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/arm/compiler/ARM/arm-asm.lisp

    r13736 r13741  
    9494(eval-when (:compile-toplevel :load-toplevel :execute)
    9595
    96 (ccl::defenum (:prefix "ARM-OPERAND-TYPE-")
    97   rd                                    ; destination register in bits 12:15
    98   rn                                    ; unshifted source/base reg in 16:19
    99   shifter                               ; composite operand for ALU ops
    100   mem12                                 ; 12-bit address for LDR/STR/LDRB/STB
    101   reglist
    102   rnw                                   ; rn, with optional writeback.
    103   uuoA                                  ; GPR in UUO bits 8:11
    104   uuo-unary                             ; constant in UUO bits 12:15
    105   uuoB                                  ; GPR in UUO bits 12:15
    106   rm
    107   b
    108   subprim
    109   mem8
    110 )
    111 
    112 (defparameter *arm-operand-type-names*
    113   `((:rd . ,arm-operand-type-rd)
    114     (:rn . ,arm-operand-type-rn)
    115     (:shifter . ,arm-operand-type-shifter)
    116     (:mem12 . ,arm-operand-type-mem12)
    117     (:reglist . ,arm-operand-type-reglist)
    118     (:rnw . ,arm-operand-type-rnw)
    119     (:uuoA . ,arm-operand-type-uuoA)
    120     (:uuo-unary . ,arm-operand-type-uuo-unary)
    121     (:uuoB . ,arm-operand-type-uuoB)
    122     (:rm . ,arm-operand-type-rm)
    123     (:b . ,arm-operand-type-b)
    124     (:subprim . ,arm-operand-type-subprim)
    125     (:mem8 . ,arm-operand-type-mem8)
     96(defparameter *arm-operand-types*
     97  #(:rd                                 ; destination register in bits 12:15
     98    :rn                                 ; unshifted source/base reg in 16:19
     99    :shifter                            ; composite operand for ALU ops
     100    :mem12                              ; 12-bit address for LDR/STR/LDRB/STB
     101    :reglist
     102    :rnw                                ; rn, with optional writeback.
     103    :uuoA                               ; GPR in UUO bits 8:11
     104    :uuo-unary                          ; constant in UUO bits 12:15
     105    :uuoB                               ; GPR in UUO bits 12:15
     106    :rm
     107    :b
     108    :subprim
     109    :mem8
     110    :dd
     111    :dm
     112    :sd
     113    :sm
     114    :dn
     115    :sn
     116    :rde
     117    :rs
    126118    ))
    127119
    128 
    129 
    130 
    131 (defun encode-arm-operand-type (name)
    132   (or (cdr (assoc name *arm-operand-type-names* :test #'eq))
     120(defun %encode-arm-operand-type (name)
     121  (or (position name *arm-operand-types* :test #'eq)
    133122      (error "Unknown ARM operand type name ~s." name)))
     123
     124(defmacro encode-arm-operand-type (name)
     125  (%encode-arm-operand-type name))
    134126
    135127(ccl::defenum (:prefix "ARM-INSTRUCTION-FLAG-")
     
    172164
    173165(defmacro define-arm-instruction (name operand-type-names value mask-list flag-names)
    174   `(%define-arm-instruction ,(string-downcase name) ,value ',mask-list ,(%encode-arm-instruction-flag flag-names) ',(mapcar #'encode-arm-operand-type operand-type-names) ))
     166  `(%define-arm-instruction ,(string-downcase name) ,value ',mask-list ,(%encode-arm-instruction-flag flag-names) ',(mapcar #'%encode-arm-operand-type operand-type-names) ))
    175167
    176168(defparameter *arm-instruction-table*
     
    185177     (:prefer-separate-cond))
    186178   (define-arm-instruction uuo-error-wrong-nargs ()
    187      #x07f000f1
     179     #x07f001f8
    188180     #x0fffffff
    189181     (:prefer-separate-cond))
    190182   (define-arm-instruction uuo-gc-trap ()
    191      #x07f001f2
     183     #x07f002f0
    192184     #x0fffffff
    193185     (:prefer-separate-cond))
    194186   (define-arm-instruction uuo-debug-trap ()
    195      #x07f002f3
     187     #x07f002f0
    196188     #x0fffffff
    197189     (:prefer-separate-cond))
    198190   (define-arm-instruction uuo-interrupt-now ()
    199      #x07f003f4
     191     #x07f003f0
    200192     #x0fffffff
    201193     (:prefer-separate-cond))
    202194   (define-arm-instruction uuo-suspend-now ()
    203      #x07f004f05
     195     #x07f004f0
    204196     #x0fffffff
    205197     (:prefer-separate-cond))
     
    232224;;; Unary UUOs
    233225   (define-arm-instruction uuo-error-unbound (:uuoA)
    234      #x07f000f1
     226     #x07f000f9
    235227     #x0ffff0ff
    236228     (:prefer-separate-cond))
    237229   (define-arm-instruction uuo-cerror-unbound (:uuoA)
    238      #x07f010f1
     230     #x07f010f9
    239231     #x0ffff0ff
    240232     (:prefer-separate-cond))
    241233   (define-arm-instruction uuo-error-not-callable (:uuoA)
    242      #x07f020f1
     234     #x07f020f9
    243235     #x0ffff0ff
    244236     (:prefer-separate-cond))
     
    248240     (:prefer-separate-cond))
    249241   (define-arm-instruction uuo-error-no-throw-tag (:uuoA)
    250      #x07f040f1
     242     #x07f040f9
    251243     #x0ffff0ff
    252244     (:prefer-separate-cond))
    253 
     245   (define-arm-instruction uuo-error-udf-call (:uuoA)
     246     #x07f050f9
     247     #x0ffff0ff
     248     (:prefer-separate-cond))
     249   (define-arm-instruction uuo-error-udf (:uuoA)
     250     #x07f060f9
     251     #x0ffff0ff
     252     (:prefer-separate-cond))
     253   
    254254;;; Binary UUOs
    255255   (define-arm-instruction uuo-error-vector-bounds (:uuoA :uuoB)
     
    261261     #x0fff00ff
    262262     (:prefer-separate-cond))
    263 
     263   (define-arm-instruction uuo-error-integer-divide-by-zero (:uuoA :uuoB)
     264     #x07f200ff
     265     #x0fff00ff
     266     (:prefer-separate-cond))
     267   (define-arm-instruction uuo-error-slot-unbound (:uuoA :uuoB)
     268     #x07f300ff
     269     #x0fff00ff
     270     (:prefer-separate-cond))
    264271
    265272   (define-arm-instruction and (:rd :rn :shifter)
     
    484491     #x0e3000f0
    485492     ())
    486 
     493   (define-arm-instruction ldrd  (:rde :mem8)
     494     #x000000d0
     495     #x0e3000f0
     496     ())
     497   (define-arm-instruction strd  (:rde :mem8)
     498     #x000000f0
     499     #x0e3000f0
     500     ())
     501
     502   (define-arm-instruction mul (:rd :rm :rs)
     503     #x00000090
     504     #x0ff000f0
     505     ())
     506   (define-arm-instruction muls (:rd :rm :rs)
     507     #x00100090
     508     #x0ff000f0
     509     ())
     510   
    487511   (define-arm-instruction stm (:rnw :reglist)
    488512     #x08800000
     
    545569     #x012fff30
    546570     #x0ffffff0
     571     ())
     572
     573;;; VFP instructions
     574   (define-arm-instruction fabsd (:dd :dm)
     575     #x0eb00bc0
     576     #x0ff00ff0
     577     ())
     578   (define-arm-instruction fabss (:sd :sm)
     579     #x0eb00ac0
     580     #x0fb00fb0
     581     ())
     582   (define-arm-instruction faddd (:dd :dn :dm)
     583     #x0e300b00
     584     #x0ff00ff0
     585     ())
     586   (define-arm-instruction fadds (:sd :sn :sm)
     587     #x0e300a00
     588     #x0f300f50
     589     ())
     590   (define-arm-instruction fmsr (:sn :rd)
     591     #x0e000a10
     592     #x0ff00f90
     593     ())
     594   (define-arm-instruction fmrs (:rd :sn)
     595     #x0e100a10
     596     #x0ff00f90
     597     ())
     598   (define-arm-instruction fmrrd (:rd :rn :dm)
     599     #x0e500b10
     600     #x0ff00ff0
     601     ())
     602   (define-arm-instruction fmdrr (:dm :rd :rn)
     603     #x0e400b10
     604     #x0ff00ff0
     605     ())
     606   (define-arm-instruction fsitod (:dd :sm)
     607     #x0eb80bc0
     608     #x0fff0fc0
     609     ())
     610   (define-arm-instruction fsitos (:sd :sm)
     611     #x0eb80ac0
     612     #x0fff0fc0
     613     ())
     614   (define-arm-instruction fcmped (:dd :dm)
     615     #x0eb40bc0
     616     #x0fff0fc0
     617     ())
     618   (define-arm-instruction fcmpes (:dd :dm)
     619     #x0eb40ac0
     620     #x0fff0fc0
     621     ())
     622   (define-arm-instruction fmstat ()
     623     #x0ef1fa10
     624     #x0fffffff
     625     ())
     626   (define-arm-instruction fsubd (:dd :dn :dm)
     627     #x0e300b40
     628     #x0ff00fc0
     629     ())
     630   (define-arm-instruction fsubs (:sd :sn :sm)
     631     #x0e300a40
     632     #x0ff00fc0
     633     ())
     634   (define-arm-instruction fmuld (:dd :dn :dm)
     635     #x0e200b00
     636     #x0ff00ff0
     637     ())
     638   (define-arm-instruction fmuls (:sd :sn :sm)
     639     #x0e200a00
     640     #x0ff00ff0
     641     ())
     642   (define-arm-instruction fdivd (:dd :dn :dm)
     643     #x0e800b00
     644     #x0ff00ff0
     645     ())
     646   (define-arm-instruction fdivs (:sd :sn :sm)
     647     #x0e800a00
     648     #x0ff00ff0
     649     ())
     650   (define-arm-instruction fcpyd (:dd :dm)
     651     #x0eb00b40
     652     #x0fb00ff0
     653     ())
     654   (define-arm-instruction fcpyd (:sd :sm)
     655     #x0eb00b40
     656     #x0fb00fc0
     657     ())
     658   (define-arm-instruction fcvtsd (:sd :dm)
     659     #x0eb70bc0
     660     #x0fbf0fc0
    547661     ())
    548662   ))
     
    667781  (or (get-arm-gpr form)
    668782      (error "Expected an ARM general-purpose register, got ~s" form)))
     783
     784(defun need-arm-sfpr (form)
     785  (or (get-arm-sfpr form)
     786      (error "Expected an ARM single FP register, got ~s" form)))
     787
     788(defun need-arm-dfpr (form)
     789  (or (get-arm-sfpr form)
     790      (error "Expected an ARM double FP register, got ~s" form)))
    669791
    670792(defun encode-arm-shift-type (op)
     
    9431065    (set-addressing-mode instruction mode constant-index))))
    9441066
    945 
    946        
     1067(defun parse-dd-operand (form instruction)
     1068  (set-field-value instruction (byte 4 12) (need-arm-dfpr form)))
     1069
     1070(defun parse-dm-operand (form instruction)
     1071  (set-field-value instruction (byte 4 0) (need-arm-dfpr form)))
     1072
     1073(defun parse-sd-operand (form instruction)
     1074  (let* ((val (need-arm-sfpr form)))
     1075    (set-field-value instruction (byte 4 12) (ash val -1))
     1076    (set-field-value instruction (byte 1 22) (logand val 1))))
     1077
     1078(defun parse-sm-operand (form instruction)
     1079  (let* ((val (need-arm-sfpr form)))
     1080    (set-field-value instruction (byte 4 0) (ash val -1))
     1081    (set-field-value instruction (byte 1 5) (logand val 1))))
     1082
     1083(defun parse-dn-operand (form instruction)
     1084  (set-field-value instruction (byte 4 16) (need-arm-dfpr form)))       
    9471085                             
    948          
    949 
     1086(defun parse-sn-operand (form instruction)
     1087  (let* ((val (need-arm-sfpr form)))
     1088    (set-field-value instruction (byte 4 16) (ash val -1))
     1089    (set-field-value instruction (byte 1 7) (logand val 1))))
     1090
     1091(defun parse-rde-operand (form instruction)
     1092  (let* ((val (need-arm-gpr form)))
     1093    (when (oddp val)
     1094      (error "Register must be even-numbered: ~s." form))
     1095    (set-field-value instruction (byte 4 12) val)))
     1096
     1097(defun parse-rs-operand (form instruction)
     1098  (set-field-value instruction (byte 4 8) (need-arm-gpr form)))
     1099 
    9501100(defparameter *arm-operand-parsers*
    9511101    #(parse-rd-operand
     
    9621112      parse-subprim-operand
    9631113      parse-m8-operand
     1114      parse-dd-operand
     1115      parse-dm-operand
     1116      parse-sd-operand
     1117      parse-sm-operand
     1118      parse-dn-operand
     1119      parse-sn-operand
     1120      parse-rde-operand
     1121      parse-rs-operand
    9641122      ))
    9651123
     
    11021260    (ccl::append-dll-node w1 primary )
    11031261    (let* ((n (set-element-addresses 0 primary)))
    1104       (setf (lap-instruction-opcode w1) n)
     1262      (setf (lap-instruction-opcode w1) (ash n (- arm::word-shift)))
    11051263      (set-element-addresses n constant-pool)))
    11061264  ;; Now fix up label references.  Recall that the PC value at some
     
    11871345
    11881346
     1347(eval-when (:compile-toplevel :load-toplevel :execute)
    11891348(defparameter *vinsn-field-types*
    11901349  #(:cond
     
    12061365    :application
    12071366    :local-label
    1208     ))
     1367    :dd
     1368    :dm
     1369    :sd
     1370    :sm
     1371    :dn
     1372    :sn
     1373    )))
    12091374
    12101375(defmacro encode-vinsn-field-type (name)
     
    12261391      vinsn-parse-subprim-operand
    12271392      vinsn-parse-m8-operand
     1393      vinsn-parse-dd-operand
     1394      vinsn-parse-dm-operand
     1395      vinsn-parse-sd-operand
     1396      vinsn-parse-sm-operand
     1397      vinsn-parse-dn-operand
     1398      vinsn-parse-sn-operand
     1399      vinsn-parse-rde-operand
     1400      vinsn-parse-rs-operand
    12281401      ))
    12291402
     
    12361409           (set-avi-opcode-field avi bytespec (need-arm-gpr form))))))
    12371410
     1411(defun vinsn-arg-or-dfpr (avi form vinsn-params encoded-type bytespec)
     1412  (let* ((p (position form vinsn-params)))
     1413    (cond (p
     1414           (add-avi-operand avi encoded-type p)
     1415           nil)
     1416          (t           
     1417           (set-avi-opcode-field avi bytespec (need-arm-dfpr form))))))
     1418
     1419(defun vinsn-arg-or-sfpr (avi form vinsn-params encoded-type top4 low1)
     1420  (let* ((p (position form vinsn-params)))
     1421    (cond (p
     1422           (add-avi-operand avi encoded-type p)
     1423           nil)
     1424          (t
     1425           (let* ((val (need-arm-sfpr form)))
     1426             (set-avi-opcode-field avi top4 (ash val -1))
     1427             (set-avi-opcode-field avi low1 (logand val 1)))))))
     1428
     1429(defun simplify-arm-vinsn-application (form params)
     1430  (labels ((simplify-operand (op)
     1431             (if (atom op)
     1432               (if (typep form 'fixnum)
     1433                 op
     1434                 (if (constantp op)
     1435                   (eval op)
     1436                   (let* ((p (position op params)))
     1437                     (if p
     1438                       (list p)
     1439                       (error "Unknown operand: ~s" op)))))
     1440               (if (eq (car op) :apply)
     1441                 `(,(cadr op) ,@(mapcar #'simplify-operand (cddr op)))))))
     1442    `(,(cadr form) ,@(mapcar #'simplify-operand (cddr form)))))
     1443
    12381444(defun vinsn-arg-or-constant (avi form vinsn-params encoded-type bytespec)
    12391445  (let* ((p (position form vinsn-params)))
     
    12411447           (add-avi-operand avi encoded-type p)
    12421448           nil)
     1449          ((typep form 'keyword)
     1450           (add-avi-operand avi encoded-type form)
     1451           nil)
    12431452          ((and (consp form) (eq (car form) :apply))
    1244            (add-avi-operand avi encoded-type (simplify-application form vinsn-params))
     1453           (add-avi-operand avi encoded-type (simplify-arm-vinsn-application form vinsn-params))
    12451454           nil)
    12461455          (t
     
    13001509
    13011510(defun vinsn-parse-m12-operand (avi value vinsn-params)
     1511  (when (typep value 'keyword)
     1512    (setq value `(:@ arm::pc (:$ ,value))))
    13021513  (destructuring-bind (op rn index) value     ; no (:@ reg) sugar
    13031514    (vinsn-arg-or-gpr avi rn vinsn-params (encode-vinsn-field-type :rn) (byte 4 16))
     
    13501561               (destructuring-bind (marker reg) value
    13511562                 (if (eq marker :!)
    1352                    (set-avi-opcode-field avi (byte 1 21) 1))
    1353                    (error "Unrecognized writeback indicator in ~s." value)
     1563                   (set-avi-opcode-field avi (byte 1 21) 1)
     1564                   (error "Unrecognized writeback indicator in ~s." value))
    13541565                 reg))))
    13551566    (vinsn-arg-or-gpr avi rn vinsn-params  (encode-vinsn-field-type :rn) (byte 4 16))))
     
    13781589          ((typep value 'keyword)
    13791590           (add-avi-operand avi (encode-vinsn-field-type :local-label) value))
     1591          ((arm-subprimitive-address value)
     1592           (add-avi-operand avi (encode-vinsn-field-type :subprim) value))
    13801593          (t
    13811594           (error "Unknown branch target: ~s." value)))))
     
    14341647              (set-opcode-value-from-addressing-mode (avi-opcode avi) mode constant-index))))))
    14351648
    1436              
    1437 
    1438 
    1439                                      
     1649(defun vinsn-parse-dd-operand (avi value vinsn-params)
     1650  (vinsn-arg-or-dfpr avi value vinsn-params (encode-vinsn-field-type :dd) (byte 4 12)))
     1651
     1652(defun vinsn-parse-dm-operand (avi value vinsn-params)
     1653  (vinsn-arg-or-dfpr avi value vinsn-params (encode-vinsn-field-type :dm) (byte 4 0)))
     1654
     1655(defun vinsn-parse-sd-operand (avi value vinsn-params)
     1656  (vinsn-arg-or-sfpr avi value vinsn-params (encode-vinsn-field-type :sd) (byte 4 12) (byte 1 22)))
     1657
     1658(defun vinsn-parse-sm-operand (avi value vinsn-params)
     1659  (vinsn-arg-or-sfpr avi value vinsn-params (encode-vinsn-field-type :sm) (byte 4 0) (byte 1 5)))
     1660
     1661(defun vinsn-parse-dn-operand (avi value vinsn-params)
     1662  (vinsn-arg-or-dfpr avi value vinsn-params (encode-vinsn-field-type :dn) (byte 4 16)))
     1663
     1664(defun vinsn-parse-sn-operand (avi value vinsn-params)
     1665  (vinsn-arg-or-sfpr avi value vinsn-params (encode-vinsn-field-type :sn) (byte 4 16) (byte 1 7)))
     1666
     1667(defun vinsn-parse-rde-operand (avi value vinsn-params)
     1668  (let* ((val (get-arm-gpr value)))
     1669    (when (and val (oddp val))
     1670      (error "Register ~s must be even-numbered." value)))
     1671  (vinsn-arg-or-gpr avi value vinsn-params (encode-vinsn-field-type :rd) (byte 4 12)))
     1672
     1673(defun vinsn-parse-rs-operand (avi value vinsn-params)
     1674  (vinsn-arg-or-gpr avi value vinsn-params (encode-vinsn-field-type :rs) (byte 4 8)))
     1675
    14401676(defun vinsn-simplify-instruction (form vinsn-params)
    14411677  (destructuring-bind (name . opvals) form
    1442     (multiple-value-bind (template cond explicit-cond) (lookup-arm-instruction name)
    1443       (unless template
    1444         (error "Unknown ARM instruction - ~s" form))
    1445       (let* ((cond-indicator (and (consp (car opvals))
    1446                                   (keywordize (caar opvals))))
    1447              (avi (make-arm-vinsn-instruction (arm-instruction-template-val template))))
    1448         (when (or (eq cond-indicator :?)
    1449                   (eq cond-indicator :~))
    1450           (let* ((condform (pop opvals)))
    1451             (destructuring-bind (cond-name) (cdr condform)
    1452               (let* ((p (position cond-name vinsn-params)))
    1453                 (if p
    1454                   (if explicit-cond
    1455                     (error "Can't use ~s with explicit condition name." condform)
    1456                     (progn
    1457                       (add-avi-operand avi (if (eq cond-indicator :?)
    1458                                              (encode-vinsn-field-type :cond)
    1459                                              (encode-vinsn-field-type :negated-cond))
    1460                                        p)
    1461                       (setq cond nil)))
    1462                   (let* ((c (need-arm-condition-name cond-name)))
    1463                     (when (eq cond-indicator :~)
    1464                       (if (< c 14)
    1465                         (setq c (logxor c 1))
    1466                         (error "Invalid explicit condition ~s." condform)))
    1467                     (if (and explicit-cond (not (eql c cond)))
    1468                       (error "Can't use explicit condition and :? : ~s" condform)
    1469                       (setq cond c))))))))
    1470         (let* ((optypes (arm-instruction-template-operand-types template))
    1471                (n (length optypes)))
    1472           (unless (= n (length opvals))
    1473             (error "ARM ~a instructions require ~d operands, but ~d were provided in ~s." (arm-instruction-template-name template) n (length opvals) form))
    1474           (dotimes (i n)
    1475             (let* ((optype (pop optypes))
    1476                    (opval (pop opvals)))
    1477               (funcall (svref *arm-vinsn-operand-parsers* optype)
    1478                        avi opval vinsn-params)))
    1479           (when cond
    1480             (set-avi-opcode-field avi (byte 4 28) cond))
    1481           (avi-head avi))))))
     1678    (case name
     1679      ((:code :data) form)
     1680      (:word (destructuring-bind (val) opvals
     1681               (let* ((p (position val vinsn-params)))
     1682                 (list name (if p (list p) (eval val))))))
     1683      (t
     1684       (multiple-value-bind (template cond explicit-cond) (lookup-arm-instruction name)
     1685         (unless template
     1686           (error "Unknown ARM instruction - ~s" form))
     1687         (let* ((cond-indicator (and (consp (car opvals))
     1688                                     (keywordize (caar opvals))))
     1689                (avi (make-arm-vinsn-instruction (arm-instruction-template-val template))))
     1690           (when (or (eq cond-indicator :?)
     1691                     (eq cond-indicator :~))
     1692             (let* ((condform (pop opvals)))
     1693               (destructuring-bind (cond-name) (cdr condform)
     1694                 (let* ((p (position cond-name vinsn-params)))
     1695                   (if p
     1696                     (if explicit-cond
     1697                       (error "Can't use ~s with explicit condition name." condform)
     1698                       (progn
     1699                         (add-avi-operand avi (if (eq cond-indicator :?)
     1700                                                (encode-vinsn-field-type :cond)
     1701                                                (encode-vinsn-field-type :negated-cond))
     1702                                          p)
     1703                         (setq cond nil)))
     1704                     (let* ((c (need-arm-condition-name cond-name)))
     1705                       (when (eq cond-indicator :~)
     1706                         (if (< c 14)
     1707                           (setq c (logxor c 1))
     1708                           (error "Invalid explicit condition ~s." condform)))
     1709                       (if (and explicit-cond (not (eql c cond)))
     1710                         (error "Can't use explicit condition and :? : ~s" condform)
     1711                         (setq cond c))))))))
     1712           (let* ((optypes (arm-instruction-template-operand-types template))
     1713                  (n (length optypes)))
     1714             (unless (= n (length opvals))
     1715               (error "ARM ~a instructions require ~d operands, but ~d were provided in ~s." (arm-instruction-template-name template) n (length opvals) form))
     1716             (dotimes (i n)
     1717               (let* ((optype (pop optypes))
     1718                      (opval (pop opvals)))
     1719                 (funcall (svref *arm-vinsn-operand-parsers* optype)
     1720                          avi opval vinsn-params)))
     1721             (when cond
     1722               (set-avi-opcode-field avi (byte 4 28) cond))
     1723             (avi-head avi))))))))
    14821724         
    14831725
     1726(defparameter *arm-vinsn-insert-functions*
     1727    #(vinsn-insert-rd-operand
     1728      vinsn-insert-rn-operand
     1729      vinsn-insert-shifter-operand
     1730      vinsn-insert-m12-operand
     1731      vinsn-insert-reglist-operand
     1732      vinsn-insert-rnw-operand
     1733      vinsn-insert-uuoa-operand
     1734      vinsn-insert-uuo-unary-operand
     1735      vinsn-insert-uuob-operand
     1736      vinsn-insert-rm-operand
     1737      vinsn-insert-b-operand
     1738      vinsn-insert-subprim-operand
     1739      vinsn-insert-m8-operand
     1740      vinsn-insert-dd-operand
     1741      vinsn-insert-dm-operand
     1742      vinsn-insert-sd-operand
     1743      vinsn-insert-sm-operand
     1744      vinsn-insert-dn-operand
     1745      vinsn-insert-sn-operand
     1746      vinsn-insert-rde-operand
     1747      vinsn-insert-rs-operand
     1748      ))
    14841749
    14851750(provide "ARM-ASM")
Note: See TracChangeset for help on using the changeset viewer.