OSDN Git Service

* insn.scm (/parse-insn-format): New arg `verify?', all callers updated.
authordevans <devans>
Thu, 10 Sep 2009 07:23:28 +0000 (07:23 +0000)
committerdevans <devans>
Thu, 10 Sep 2009 07:23:28 +0000 (07:23 +0000)
(/insn-parse): Don't verify iformat for virtual insns.

* sid-decode.scm (cgen-decode.cxx): Remove redundant call to
non-multi-insns.
* sid-model.scm (/gen-model-insn-fn-decls): Ditto.
(/gen-model-insn-fns, /gen-model-class-decls): Ditto.
* sid.scm (pbb-engine-insns): Ditto.
* sim-decode.scm (cgen-decode.c): Ditto.

cgen/ChangeLog
cgen/insn.scm
cgen/operand.scm
cgen/sid-decode.scm
cgen/sid-model.scm
cgen/sid.scm
cgen/sim-decode.scm

index d34577b..48d766b 100644 (file)
@@ -1,3 +1,15 @@
+2009-09-10  Doug Evans  <dje@sebabeach.org>
+
+       * insn.scm (/parse-insn-format): New arg `verify?', all callers updated.
+       (/insn-parse): Don't verify iformat for virtual insns.
+       
+       * sid-decode.scm (cgen-decode.cxx): Remove redundant call to
+       non-multi-insns.
+       * sid-model.scm (/gen-model-insn-fn-decls): Ditto.
+       (/gen-model-insn-fns, /gen-model-class-decls): Ditto.
+       * sid.scm (pbb-engine-insns): Ditto.
+       * sim-decode.scm (cgen-decode.c): Ditto.
+
 2009-09-09  Doug Evans  <dje@sebabeach.org>
 
        * rtl-traverse.scm: Comment tweaks.
index efa117b..6068240 100644 (file)
              (semantics (if (not (null? semantics))
                             semantics
                             #f))
-             (format (/parse-insn-format (context-append context " format")
-                                         ;; Just pick the first, the base len
-                                         ;; for each should be the same.
-                                         ;; If not this is caught by
-                                         ;; compute-insn-base-mask-length.
-                                         (current-isa-lookup (car isas))
-                                         fmt))
+             (format (/parse-insn-format
+                      (context-append context " format")
+                      (and (not (atlist-has-attr? atlist-obj 'VIRTUAL))
+                           (reader-verify-iformat? CURRENT-READER))
+                      ;; Just pick the first, the base len
+                      ;; for each should be the same.
+                      ;; If not this is caught by
+                      ;; compute-insn-base-mask-length.
+                      (current-isa-lookup (car isas))
+                      fmt))
              (comment (parse-comment context comment))
              ; If there are no semantics, mark this as an alias.
              ; ??? Not sure this makes sense for multi-insns.
 
 ; Given an insn format field from a .cpu file, replace it with a list of
 ; ifield objects with the values assigned.
-; If ISA is non-#f, it is an <isa> object, and we perform various checks
-; on the format (which require an isa).
+; ISA is an <isa> object or #f.
+; If VERIFY? is non-#f, perform various checks on the format
+; (ISA must be an <isa> object).
 ;
 ; An insn format field is a list of ifields that make up the instruction.
 ; All bits must be specified, including reserved bits
 ; It's called for each instruction, and is one of the more expensive routines
 ; in insn parsing.
 
-(define (/parse-insn-format context isa ifld-list)
+(define (/parse-insn-format context verify? isa ifld-list)
   (let* ((parsed-ifld-list (/parse-insn-iformat-iflds context ifld-list)))
 
     ;; NOTE: We could sort the fields here, but it introduces differences
     ;; Is there a benefit to removing this assumption?  Note that
     ;; multi-ifields can be discontiguous, so the sorting isn't perfect.
 
-    (if (and isa
-            (reader-verify-iformat? CURRENT-READER))
+    (if verify?
+
        (let ((base-len (isa-base-insn-bitsize isa)))
 
          ;; Perform some error checking.
index c5ce82a..eb0c62a 100644 (file)
 
   ; ??? Calling /parse-insn-format is a quick hack.
   ; It's an internal routine of some other file.
-  (let ((iflds (/parse-insn-format context #f encoding)))
+  (let ((iflds (/parse-insn-format context #f #f encoding)))
     (make <derived-ifield>
          operand-name
          'derived-ifield ; (string-append "<derived-ifield> for " operand-name)
index 9aff1bc..d58adbc 100644 (file)
@@ -748,7 +748,7 @@ using namespace @cpu@; // FIXME: namespace organization still wip
 
    (lambda () (/gen-decode-insn-globals (non-multi-insns (non-alias-insns (current-insn-list)))))
    /gen-virtual-insn-finder
-   (lambda () (/gen-decode-fn (non-multi-insns (real-insns (current-insn-list)))
+   (lambda () (/gen-decode-fn (real-insns (current-insn-list))
                              (state-decode-assist)
                              (current-arch-insn-lsb0?)))
    )
index 5a31f8a..825e589 100644 (file)
@@ -152,7 +152,7 @@ static const MACH_IMP_PROPERTIES @cpu@_imp_properties =
       (string-list
        "  " (/gen-model-insn-fn-decl model insn 'before)
        "  " (/gen-model-insn-fn-decl model insn 'after)))
-    (non-multi-insns (real-insns (current-insn-list))))
+    (real-insns (current-insn-list)))
   )
 )
 
@@ -217,7 +217,7 @@ static const MACH_IMP_PROPERTIES @cpu@_imp_properties =
                    (string-list
                     (/gen-model-insn-fn model insn 'before)
                     (/gen-model-insn-fn model insn 'after)))
-                 (non-multi-insns (real-insns (current-insn-list)))))
+                 (real-insns (current-insn-list))))
               (current-model-list)))
    )
 )
@@ -251,7 +251,7 @@ static const MACH_IMP_PROPERTIES @cpu@_imp_properties =
    ; FIXME: revisit MAX_UNITS
   "  static const int MAX_UNITS = "
   (number->string
-   (let ((insn-list (non-multi-insns (real-insns (current-insn-list)))))
+   (let ((insn-list (real-insns (current-insn-list))))
      (if (null? insn-list)
         1
         (apply max
index 535c2cb..dffeb96 100644 (file)
 ; This is all real insns plus the `invalid' and `cond' virtual insns.
 
 (define (pbb-engine-insns)
-  (non-multi-insns (real-insns (current-insn-list)))
+  (real-insns (current-insn-list))
 )
 
 ;; Subroutine of /create-virtual-insns!.
index ae799c8..3d1a1e3 100644 (file)
@@ -586,7 +586,7 @@ const IDESC *
 
    (lambda () (/gen-decode-insn-globals (non-multi-insns (non-alias-insns (current-insn-list)))))
    /gen-idesc-init-fn
-   (lambda () (/gen-decode-fn (non-multi-insns (real-insns (current-insn-list)))
+   (lambda () (/gen-decode-fn (real-insns (current-insn-list))
                              (state-decode-assist)
                              (current-arch-insn-lsb0?)))
    )