]> sourceware.org Git - cgen.git/commitdiff
* snapshot of work toward more complete support of derived-operands
authorFrank Ch. Eigler <fche@redhat.com>
Tue, 22 Aug 2000 19:14:30 +0000 (19:14 +0000)
committerFrank Ch. Eigler <fche@redhat.com>
Tue, 22 Aug 2000 19:14:30 +0000 (19:14 +0000)
2000-08-22  Frank Ch. Eigler  <fche@redhat.com>

* Makefile.in (DIST_COMMON): Regenerated.
* ifield.scm (derived-ifield needed-iflds): New method.
* iformat.scm (-ifmt-lookup-sfmt!): Use base ifields for
sfmts built from derived-ifields.
* operand.scm (-derived-parse-encoding): Give derived-ifield a fixed
type symbol 'derived-ifield, not an unparseable string.
* utils-sim.scm (op-needed-iflds) Handler 'derived-ifield case.
(-sfmt-contents): Add tracing.

From Doug Evans <dje@transmeta.com>:
* sim.scm (operand cxmake-get): Result is a <c-expr>, not a string of
C code.

ChangeLog
Makefile.in
ifield.scm
iformat.scm
operand.scm
sim.scm
utils-sim.scm

index fcce2cb57792d3899e72c1f13835215d23cf76c7..c712d175a7c3821e5d10a2b0cd26daffd10dadac 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2000-08-22  Frank Ch. Eigler  <fche@redhat.com>
+
+       * Makefile.in (DIST_COMMON): Regenerated.
+       * ifield.scm (derived-ifield needed-iflds): New method.
+       * iformat.scm (-ifmt-lookup-sfmt!): Use base ifields for
+       sfmts built from derived-ifields.
+       * operand.scm (-derived-parse-encoding): Give derived-ifield a fixed
+       type symbol 'derived-ifield, not an unparseable string.
+       * utils-sim.scm (op-needed-iflds) Handler 'derived-ifield case.
+       (-sfmt-contents): Add tracing.
+
+       From Doug Evans <dje@transmeta.com>:
+       * sim.scm (operand cxmake-get): Result is a <c-expr>, not a string of
+       C code.
+
 2000-08-20  Doug Evans  <dje@casey.transmeta.com>
 
        * rtl-c.scm (rtl-c-expr-with-estate): New fn.
index e42cf2e651759b19bc3462265ecbb92e518d416c..53bbad9b1d32df0eee25516ce3eafb70b136dcba 100644 (file)
@@ -84,8 +84,8 @@ CLEANFILES = tmp-*
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
 CONFIG_CLEAN_FILES = 
-DIST_COMMON =  README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
-Makefile.in NEWS aclocal.m4 configure configure.in
+DIST_COMMON =  README AUTHORS ChangeLog INSTALL Makefile.am Makefile.in \
+NEWS aclocal.m4 configure configure.in
 
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
index 0a47f0223912a2f3f56c107c0befdd6b1eeb0faf..768c834e65147a041526cc2396619e19c7dbeb37 100644 (file)
@@ -971,6 +971,15 @@ Define an instruction multi-field, all arguments specified.
              nil)
 )
 
+
+(method-make!
+ <derived-ifield> 'needed-iflds
+ (lambda (self)
+   (find (lambda (ifld) (not (ifld-constant? ifld)))
+        (elm-get self 'subfields)))
+)
+
+
 (method-make!
  <derived-ifield> 'make!
  (lambda (self name comment attrs owner subfields)
index 1717f38d2c9f46976a5a1501bd123ad8b9624360..5ddef2536d0bc0d3e2bf8a0574a2a7fb8bb777ed 100644 (file)
                                 (-fmt-desc-cti? fmt-desc)
                                 (-fmt-desc-in-ops fmt-desc)
                                 (-fmt-desc-out-ops fmt-desc)
-                                (-fmt-desc-used-iflds fmt-desc))))
+                                (ifields-base-ifields (-fmt-desc-used-iflds fmt-desc)))))
          (logit 3 "Creating sformat " (number->string sfmt-index) ".\n")
          (insn-set-sfmt! insn sfmt)
          (append! sfmt-list (list sfmt))
index 03a5217298568d82bcb3d84ef558eef4f2ddb676..0c587434b5671168777fd6e6806c6195352f7c95 100644 (file)
   (let ((iflds (-parse-insn-format "anyof encoding" encoding)))
     (make <derived-ifield>
          operand-name
-         (string-append "<derived-ifield> for " operand-name)
+         'derived-ifield ; (string-append "<derived-ifield> for " operand-name)
          atlist-empty
          #f ; owner
          iflds ; subfields
                                                  (length args)))
                       )))
            (elm-set! result 'hw-name (obj:name (hardware-for-mode mode-obj)))
+           ;(elm-set! result 'hw-name (obj:name parsed-encoding))
+           ;(elm-set! result 'hw-name base-ifield)
            (elm-set! result 'index parsed-encoding)
            ; (elm-set! result 'index (hw-index-derived)) ; A temporary dummy
            (logit 1 "new derived-operand; name=" name " hw-name= " (op:hw-name result) 
diff --git a/sim.scm b/sim.scm
index 7f2b6b0a92fb330ea72055e92dbf1ea221d611e6..439e5cf405bfb69fd1567146aaf8c2c5405d079f 100644 (file)
--- a/sim.scm
+++ b/sim.scm
           ((op:getter self)
            (let ((args (car (op:getter self)))
                  (expr (cadr (op:getter self))))
-             (rtl-c mode expr
-                    (if (= (length args) 0)
-                        nil
-                        (list (list (car args) 'UINT index)))
-                    #:rtl-cover-fns? #t)))
+             (rtl-c-expr mode expr
+                         (if (= (length args) 0)
+                             nil
+                             (list (list (car args) 'UINT index)))
+                         #:rtl-cover-fns? #t)))
           (else
            (send (op:type self) 'cxmake-get estate mode index selector)))))
 )
index e0951adb07acb0d26f61db67a33c3bc46c5c2510..d24d7751d4b5a58ece21d3fafbe5607918883722 100644 (file)
 
 (define (op-needed-iflds op sfmt)
   (let ((indx (op:index op)))
-    (if (and (eq? (hw-index:type indx) 'ifield)
-            (not (= (ifld-length (hw-index:value indx)) 0)))
-       (hw-needed-iflds (op:type op) op sfmt)
-       nil))
-)
+    (logit 4 "op-needed-iflds op=" (obj:name op) " indx=" (obj:name indx)
+          " indx-type=" (hw-index:type indx) " sfmt=" (obj:name sfmt) "\n")
+    (cond
+     ((and 
+       (eq? (hw-index:type indx) 'ifield)
+       (not (= (ifld-length (hw-index:value indx)) 0)))
+      (hw-needed-iflds (op:type op) op sfmt))
+     ((eq? (hw-index:type indx) 'derived-ifield)
+      (ifld-needed-iflds indx))
+     (else nil)))
+  ;;;; EUREKA ******
+  )
 \f
 ; Operand extraction (ARGBUF) support code.
 ;
                           (else
                            #f))))
        )
+    (logit 4 
+          "-sfmt-contents sfmt=" (obj:name sfmt) 
+          " needed-iflds=" (string-map obj:name needed-iflds)
+          " extracted-ops=" (string-map obj:name extracted-ops)
+          " in-ops=" (string-map obj:name in-ops)
+          " out-ops=" (string-map obj:name out-ops)
+          "\n")
     (cons sfmt
          (sort
           ; Compute list of all things we need to record at extraction time.
This page took 0.038045 seconds and 5 git commands to generate.