OSDN Git Service

* consistency improvement for isa-filtering in *ifield parsers
authorfche <fche>
Fri, 15 Sep 2000 15:01:20 +0000 (15:01 +0000)
committerfche <fche>
Fri, 15 Sep 2000 15:01:20 +0000 (15:01 +0000)
2000-09-15  Frank Ch. Eigler  <fche@redhat.com>

* enum.scm (define-full-insn-enum): Filter with keep-isa predicate.
* ifield.scm (-ifield-parse, -multi-ifield-parse): No longer assert
single-isa predicate, but support keep-isa filtering.

cgen/ChangeLog
cgen/enum.scm
cgen/ifield.scm

index 512652d..002f2ef 100644 (file)
@@ -1,3 +1,9 @@
+2000-09-15  Frank Ch. Eigler  <fche@redhat.com>
+
+       * enum.scm (define-full-insn-enum): Filter with keep-isa predicate.
+       * ifield.scm (-ifield-parse, -multi-ifield-parse): No longer assert
+       single-isa predicate, but support keep-isa filtering.
+
 2000-09-08  Frank Ch. Eigler  <fche@redhat.com>
 
        * rtl-c.scm (s-sequence): Handle nested c-calls in both
index 3e4c9c9..ac2c4f9 100644 (file)
 ; Define an insn enum, all arguments specified.
 
 (define (define-full-insn-enum name comment attrs prefix fld vals)
-  (let ((errtxt "define-full-insn-enum")
-       (fld-obj (current-ifld-lookup fld)))
-
-    (if (not fld-obj)
-       (parse-error errtxt "unknown insn field" fld))
-
-    ; Create enum object and add it to the list of enums.
-    (let ((e (make <insn-enum>
-              (parse-name name errtxt)
-              (parse-comment comment errtxt)
-              (atlist-parse attrs "insn-enum" errtxt)
-              (-enum-parse-prefix errtxt prefix)
-              fld-obj
-              (parse-enum-vals prefix vals))))
-      (current-enum-add! e)
-      e))
-)
+  (let* ((errtxt "define-full-insn-enum")
+        (atlist (atlist-parse attrs "insn_enum" errtxt))
+        (fld-obj (current-ifld-lookup fld)))
+
+    (if (keep-isa-atlist? atlist #f)
+       (begin
+         (if (not fld-obj)
+             (parse-error errtxt "unknown insn field" fld))
+         
+                                       ; Create enum object and add it to the list of enums.
+         (let ((e (make <insn-enum>
+                    (parse-name name errtxt)
+                    (parse-comment comment errtxt)
+                    (atlist-parse attrs "insn-enum" errtxt)
+                    (-enum-parse-prefix errtxt prefix)
+                    fld-obj
+                    (parse-enum-vals prefix vals))))
+           (current-enum-add! e)
+           e))))
+  )
 \f
 (define (enum-init!)
 
index 768c834..82db538 100644 (file)
         (atlist (atlist-parse attrs "cgen_ifld" errtxt))
         (isas (bitset-attr->list (atlist-attr-value atlist 'ISA #f))))
 
-    ; Ensure only one isa specified.
-    (if (!= (length isas) 1)
-       (parse-error errtxt "can only specify 1 isa" attrs))
+    ; No longer ensure only one isa specified.
+    ;(if (!= (length isas) 1)
+    ;  (parse-error errtxt "can only specify 1 isa" attrs))
 
     (if (not (eq? (->bool word-offset)
                  (->bool word-length)))
@@ -857,34 +857,44 @@ Define an instruction multi-field, all arguments specified.
 (define (-multi-ifield-parse errtxt name comment attrs mode subfields insert extract encode decode)
   (logit 2 "Processing multi-ifield element " name " ...\n")
 
-  (let ((name (parse-name name errtxt))
-       (result (new <multi-ifield>))
-       (subfields (map (lambda (subfld)
-                         (let ((f (current-ifld-lookup subfld)))
-                           (if (not f)
-                               (parse-error errtxt "unknown ifield" subfld))
-                           f))
-                       subfields)))
-
-    (elm-xset! result 'name name)
-    (elm-xset! result 'comment (parse-comment comment errtxt))
-    ; multi-ifields are always VIRTUAL
-    (elm-xset! result 'attrs
-              (atlist-parse (cons 'VIRTUAL attrs) "multi-ifield" errtxt))
-    (elm-xset! result 'mode (parse-mode-name mode errtxt))
-    (elm-xset! result 'encode (-ifld-parse-encode errtxt encode))
-    (elm-xset! result 'decode (-ifld-parse-encode errtxt decode))
-    (if insert
-       (elm-xset! result 'insert insert)
-       (elm-xset! result 'insert
-                  (-multi-ifield-make-default-insert name subfields)))
-    (if extract
-       (elm-xset! result 'extract extract)
-       (elm-xset! result 'extract
-                  (-multi-ifield-make-default-extract name subfields)))
-    (elm-xset! result 'subfields subfields)
-
-    result)
+  (let* ((name (parse-name name errtxt))
+        (atlist (atlist-parse attrs "cgen_ifld" errtxt))
+        (isas (bitset-attr->list (atlist-attr-value atlist 'ISA #f))))
+    
+    ; No longer ensure only one isa specified.
+    ; (if (!= (length isas) 1) 
+    ;     (parse-error errtxt "can only specify 1 isa" attrs))
+    
+    (if (keep-isa-atlist? atlist #f)
+       (begin
+         (let ((result (new <multi-ifield>))
+               (subfields (map (lambda (subfld)
+                                 (let ((f (current-ifld-lookup subfld)))
+                                   (if (not f)
+                                       (parse-error errtxt "unknown ifield" subfld))
+                                   f))
+                               subfields)))
+           
+           (elm-xset! result 'name name)
+           (elm-xset! result 'comment (parse-comment comment errtxt))
+                                       ; multi-ifields are always VIRTUAL
+           (elm-xset! result 'attrs
+                      (atlist-parse (cons 'VIRTUAL attrs) "multi-ifield" errtxt))
+           (elm-xset! result 'mode (parse-mode-name mode errtxt))
+           (elm-xset! result 'encode (-ifld-parse-encode errtxt encode))
+           (elm-xset! result 'decode (-ifld-parse-encode errtxt decode))
+           (if insert
+               (elm-xset! result 'insert insert)
+               (elm-xset! result 'insert
+                          (-multi-ifield-make-default-insert name subfields)))
+           (if extract
+               (elm-xset! result 'extract extract)
+               (elm-xset! result 'extract
+                          (-multi-ifield-make-default-extract name subfields)))
+           (elm-xset! result 'subfields subfields)
+           result))
+       ; else don't keep isa
+       #f))
 )
 
 ; Read an instruction multi-ifield.
@@ -929,7 +939,8 @@ Define an instruction multi-field, all arguments specified.
 (define define-multi-ifield
   (lambda arg-list
     (let ((f (apply -multi-ifield-read (cons "define-multi-ifield" arg-list))))
-      (current-ifld-add! f)
+      (if f
+         (current-ifld-add! f))
       f))
 )