OSDN Git Service

2003-09-08 Dave Brolley <brolley@redhat.com>
authorbrolley <brolley>
Mon, 8 Sep 2003 17:17:22 +0000 (17:17 +0000)
committerbrolley <brolley>
Mon, 8 Sep 2003 17:17:22 +0000 (17:17 +0000)
        On behalf of Doug Evans <dje@sebabeach.org>
        Pass in paths to input files, instead of assuming they live in
        $srcdir/cpu.  Plus misc. option processing cleanup.
        * cgen-doc.scm (doc-arguments): Make options strings not symbols.
        Add pre-process pass to all options.
        * cgen-gas.scm (gas-arguments): Ditto.
        * cgen-sid.scm (sim-arguments): Ditto.
        * cgen-sim.scm (sim-arguments): Ditto.
        * cgen-stest.scm (stest-arguments): Ditto.
        * cgen-opc.scm (opc-arguments): Ditto.  New argument -OPC.
        (-opc-file-path): New global.
        (opc-file-path): New fn.
        * opcodes.scm (read-cpu.opc): Replace srcdir,cpu args with opc-file.
        All callers updated.
        (gen-extra-cpu.h,gen-extra-cpu.c,gen-extra-opc.h,gen-extra-opc.c,
        gen-extra-asm.c,gen-extra-dis.c,gen-extra-ibld.h,gen-extra-ibld.c):
        Replace srcdir arg with opc-file.  All callers updated.
        * read.scm (-opt-spec-update): Delete.
        (opt-get-first-pass,opt-get-second-pass): New fns.
        (-cgen): Process application-specific arguments in two passes.

13 files changed:
cgen/ChangeLog
cgen/cgen-doc.scm
cgen/cgen-gas.scm
cgen/cgen-opc.scm
cgen/cgen-sid.scm
cgen/cgen-sim.scm
cgen/cgen-stest.scm
cgen/desc-cpu.scm
cgen/opc-asmdis.scm
cgen/opc-ibld.scm
cgen/opc-itab.scm
cgen/opcodes.scm
cgen/read.scm

index 79f08d4..2309d3a 100644 (file)
@@ -1,3 +1,26 @@
+2003-09-08  Dave Brolley  <brolley@redhat.com>
+
+       On behalf of Doug Evans <dje@sebabeach.org>
+       Pass in paths to input files, instead of assuming they live in
+       $srcdir/cpu.  Plus misc. option processing cleanup.
+       * cgen-doc.scm (doc-arguments): Make options strings not symbols.
+       Add pre-process pass to all options.
+       * cgen-gas.scm (gas-arguments): Ditto.
+       * cgen-sid.scm (sim-arguments): Ditto.
+       * cgen-sim.scm (sim-arguments): Ditto.
+       * cgen-stest.scm (stest-arguments): Ditto.
+       * cgen-opc.scm (opc-arguments): Ditto.  New argument -OPC.
+       (-opc-file-path): New global.
+       (opc-file-path): New fn.
+       * opcodes.scm (read-cpu.opc): Replace srcdir,cpu args with opc-file.
+       All callers updated.
+       (gen-extra-cpu.h,gen-extra-cpu.c,gen-extra-opc.h,gen-extra-opc.c,
+       gen-extra-asm.c,gen-extra-dis.c,gen-extra-ibld.h,gen-extra-ibld.c):
+       Replace srcdir arg with opc-file.  All callers updated.
+       * read.scm (-opt-spec-update): Delete.
+       (opt-get-first-pass,opt-get-second-pass): New fns.
+       (-cgen): Process application-specific arguments in two passes.
+
 2003-08-29  Dave Brolley  <brolley@redhat.com>
 
        * cpu/frv.cpu: Removed.
index be9f891..b2c6ae4 100644 (file)
 
 (define doc-arguments
   (list
-   (list '-H "file" "generate $arch.html in <file>"
+   (list "-H" "file" "generate $arch.html in <file>"
+        #f
         (lambda (arg) (file-write arg cgen.html)))
-   ; can't use '-I because that gets interpreted as a complex number
-   (list (string->symbol "-I") "file" "generate $arch-insn.html in <file>"
+   (list "-I" "file" "generate $arch-insn.html in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-insn.html)))
-   (list '-N "file" "specify name of insn.html file"
+   (list "-N" "file" "specify name of insn.html file"
+        #f
         (lambda (arg) (set! *insn-html-file-name* arg)))
    )
 )
index 4f84a04..39fe13a 100644 (file)
 
 (define gas-arguments
   (list
-   (list '-B "file" "generate build script in <file>"
+   (list "-B" "file" "generate build script in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-build.sh)))
-   (list '-E "file" "generate allinsn.exp in <file>"
+   (list "-E" "file" "generate allinsn.exp in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-allinsn.exp)))
    )
 )
index cd98fe0..843859e 100644 (file)
   (load (string-append srcdir "/opc-opinst.scm"))
 )
 
+; Records the -OPC arg which specifies the path to the .opc file.
+(define -opc-file-path #f)
+(define (opc-file-path)
+  (if -opc-file-path
+      -opc-file-path
+      (error ".opc file unspecified, missing -OPC argument"))
+)
+
 (define opc-arguments
   (list
-   (list '-H "file" "generate $arch-desc.h in <file>"
+   (list "-OPC" "file" "specify path to .opc file"
+        (lambda (arg) (set! -opc-file-path arg))
+        #f)
+   (list "-H" "file" "generate $arch-desc.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-desc.h)))
-   (list '-C "file" "generate $arch-desc.c in <file>"
+   (list "-C" "file" "generate $arch-desc.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-desc.c)))
-   (list '-O "file" "generate $arch-opc.h in <file>"
+   (list "-O" "file" "generate $arch-opc.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-opc.h)))
-   (list '-P "file" "generate $arch-opc.c in <file>"
+   (list "-P" "file" "generate $arch-opc.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-opc.c)))
-   (list '-Q "file" "generate $arch-opinst.c in <file>"
+   (list "-Q" "file" "generate $arch-opinst.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-opinst.c)))
-   (list '-B "file" "generate $arch-ibld.h in <file>"
+   (list "-B" "file" "generate $arch-ibld.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-ibld.h)))
-   (list '-L "file" "generate $arch-ibld.in in <file>"
+   (list "-L" "file" "generate $arch-ibld.in in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-ibld.in)))
-   (list '-A "file" "generate $arch-asm.in in <file>"
+   (list "-A" "file" "generate $arch-asm.in in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-asm.in)))
-   (list '-D "file" "generate $arch-dis.in in <file>"
+   (list "-D" "file" "generate $arch-dis.in in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-dis.in)))
    )
 )
index ba879fd..7a00cc5 100644 (file)
 
 (define sim-arguments
   (list
-   (list '-H "file" "generate desc.h in <file>"
+   (list "-H" "file" "generate desc.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-desc.h)))
-   (list '-C "file" "generate cpu.h in <file>"
+   (list "-C" "file" "generate cpu.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-cpu.h)))
-   (list '-E "file" "generate defs.h in <file>"
+   (list "-E" "file" "generate defs.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-defs.h)))
-   (list '-T "file" "generate decode.h in <file>"
+   (list "-T" "file" "generate decode.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-decode.h)))
-   (list '-D "file" "generate decode.cxx in <file>"
+   (list "-D" "file" "generate decode.cxx in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-decode.cxx)))
-   (list '-W "file" "generate write.cxx in <file>"
+   (list "-W" "file" "generate write.cxx in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-write.cxx)))
-   (list '-S "file" "generate semantics.cxx in <file>"
+   (list "-S" "file" "generate semantics.cxx in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-semantics.cxx)))
-   (list '-X "file" "generate sem-switch.cxx in <file>"
+   (list "-X" "file" "generate sem-switch.cxx in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-sem-switch.cxx)))
-   (list '-M "file" "generate model.cxx in <file>"
+   (list "-M" "file" "generate model.cxx in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-model.cxx)))
-   (list '-N "file" "generate model.h in <file>"
+   (list "-N" "file" "generate model.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-model.h)))
    )
 )
index b774f70..e40f875 100644 (file)
 
 (define sim-arguments
   (list
-   (list '-A "file" "generate arch.h in <file>"
+   (list "-A" "file" "generate arch.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-arch.h)))
-   (list '-B "file" "generate arch.c in <file>"
+   (list "-B" "file" "generate arch.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-arch.c)))
-   (list '-C "file" "generate cpu-<cpu>.h in <file>"
+   (list "-C" "file" "generate cpu-<cpu>.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-cpu.h)))
-   (list '-U "file" "generate cpu-<cpu>.c in <file>"
+   (list "-U" "file" "generate cpu-<cpu>.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-cpu.c)))
-   (list '-N "file" "generate cpu-all.h in <file>"
+   (list "-N" "file" "generate cpu-all.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-cpuall.h)))
-   (list '-F "file" "generate memops.h in <file>"
+   (list "-F" "file" "generate memops.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-mem-ops.h)))
-   (list '-G "file" "generate defs.h in <file>"
+   (list "-G" "file" "generate defs.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-defs.h)))
-   (list '-P "file" "generate semops.h in <file>"
+   (list "-P" "file" "generate semops.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-sem-ops.h)))
-   (list '-T "file" "generate decode.h in <file>"
+   (list "-T" "file" "generate decode.h in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-decode.h)))
-   (list '-D "file" "generate decode.c in <file>"
+   (list "-D" "file" "generate decode.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-decode.c)))
-   (list '-E "file" "generate extract.c in <file>"
+   (list "-E" "file" "generate extract.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-extract.c)))
-   (list '-R "file" "generate read.c in <file>"
+   (list "-R" "file" "generate read.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-read.c)))
-   (list '-W "file" "generate write.c in <file>"
+   (list "-W" "file" "generate write.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-write.c)))
-   (list '-S "file" "generate semantics.c in <file>"
+   (list "-S" "file" "generate semantics.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-semantics.c)))
-   (list '-X "file" "generate sem-switch.c in <file>"
+   (list "-X" "file" "generate sem-switch.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-sem-switch.c)))
-   (list '-O "file" "generate ops.c in <file>"
+   (list "-O" "file" "generate ops.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-ops.c)))
-   (list '-M "file" "generate model.c in <file>"
+   (list "-M" "file" "generate model.c in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-model.c)))
-   (list '-L "file" "generate mainloop.in in <file>"
+   (list "-L" "file" "generate mainloop.in in <file>"
+        #f
         (lambda (arg) (file-write arg cgen-mainloop.in)))
    )
 )
index ed1edec..8eafd14 100644 (file)
 
 (define stest-arguments
   (list
-   (list '-B "file" "generate build.sh"
+   (list "-B" "file" "generate build.sh"
+        #f
         (lambda (arg) (file-write arg cgen-build.sh)))
-   (list '-E "file" "generate the testsuite .exp"
+   (list "-E" "file" "generate the testsuite .exp"
+        #f
         (lambda (arg) (file-write arg cgen-allinsn.exp)))
    )
 )
index 2dae243..e59526a 100644 (file)
@@ -1017,7 +1017,7 @@ init_tables ()
    -gen-mach-table-decls
    gen-hw-table-decls
    "\n"
-   (lambda () (gen-extra-cpu.h srcdir (current-arch-name))) ; from <arch>.opc
+   (lambda () (gen-extra-cpu.h (opc-file-path) (current-arch-name)))
    "
 
 #endif /* @ARCH@_CPU_H */
@@ -1050,7 +1050,7 @@ init_tables ()
 #include \"libiberty.h\"
 #include \"xregex.h\"
 \n"
-   (lambda () (gen-extra-cpu.c srcdir (current-arch-name))) ; from <arch>.opc
+   (lambda () (gen-extra-cpu.c (opc-file-path) (current-arch-name)))
    gen-attr-table-defns
    -gen-isa-table-defns
    -gen-mach-table-defns
index 6152df2..5bd575b 100644 (file)
@@ -85,7 +85,7 @@ void
   (string-write
    ; No need for copyright, appended to file with one.
    "\n"
-   (lambda () (gen-extra-asm.c srcdir (current-arch-name))) ; from <arch>.opc
+   (lambda () (gen-extra-asm.c (opc-file-path) (current-arch-name)))
    "\n"
    -gen-parse-switch
    (lambda () (gen-handler-table "parse" opc-parse-handlers))
@@ -178,7 +178,7 @@ void
   (string-write
    ; No need for copyright, appended to file with one.
    "\n"
-   (lambda () (gen-extra-dis.c srcdir (current-arch-name))) ; from <arch>.opc
+   (lambda () (gen-extra-dis.c (opc-file-path) (current-arch-name)))
    "\n"
    -gen-print-switch
    (lambda () (gen-handler-table "print" opc-print-handlers))
index a7aa174..9751962 100644 (file)
@@ -307,7 +307,7 @@ void
 #define @ARCH@_IBLD_H
 
 "
-   (lambda () (gen-extra-ibld.h srcdir (current-arch-name))) ; from <arch>.opc
+   (lambda () (gen-extra-ibld.h (opc-file-path) (current-arch-name)))
    "\n"
    gen-insn-builders
    "
index b36801d..704fabe 100644 (file)
@@ -698,7 +698,7 @@ void
 #define @ARCH@_OPC_H
 
 "
-   (lambda () (gen-extra-opc.h srcdir (current-arch-name))) ; from <arch>.opc
+   (lambda () (gen-extra-opc.h (opc-file-path) (current-arch-name)))
    -gen-insn-enum
    -gen-ifield-decls
    -gen-init-macros
@@ -725,7 +725,7 @@ void
 #include \"@prefix@-opc.h\"
 #include \"libiberty.h\"
 \n"
-   (lambda () (gen-extra-opc.c srcdir (current-arch-name))) ; from <arch>.opc
+   (lambda () (gen-extra-opc.c (opc-file-path) (current-arch-name)))
    -gen-hash-decls
    -gen-ifmt-table
    -gen-insn-opcode-table
index 98b857b..286f34e 100644 (file)
 )
 \f
 ; Extra target specific code generation.
-; For now, such code lives in <arch>.opc.
 
 ; Pick out a section from the .opc file.
 ; The section is delimited with:
 ; FIXME: This is a pretty involved bit of code.  'twould be nice to split
 ; it up into manageable chunks.
 
-(define (read-cpu.opc srcdir cpu delim)
-  (let ((file (string-append srcdir "/cpu/"
-                            (symbol->string (current-arch-name))
-                            ".opc"))
+(define (read-cpu.opc opc-file delim)
+  (let ((file opc-file)
        (start-delim (string-append "/* -- " delim))
        (end-delim "/* -- "))
     (if (file-exists? file)
        ))
 )
 
-; FIXME: collapse into one?
-(define (gen-extra-cpu.h srcdir arch)
+(define (gen-extra-cpu.h opc-file arch)
   (logit 2 "Generating extra cpu.h stuff from " arch ".opc ...\n")
-  (read-cpu.opc srcdir arch "cpu.h")
+  (read-cpu.opc opc-file "cpu.h")
 )
-(define (gen-extra-cpu.c srcdir arch)
+(define (gen-extra-cpu.c opc-file arch)
   (logit 2 "Generating extra cpu.c stuff from " arch ".opc ...\n")
-  (read-cpu.opc srcdir arch "cpu.c")
+  (read-cpu.opc opc-file "cpu.c")
 )
-(define (gen-extra-opc.h srcdir arch)
+(define (gen-extra-opc.h opc-file arch)
   (logit 2 "Generating extra opc.h stuff from " arch ".opc ...\n")
-  (read-cpu.opc srcdir arch "opc.h")
+  (read-cpu.opc opc-file "opc.h")
 )
-(define (gen-extra-opc.c srcdir arch)
+(define (gen-extra-opc.c opc-file arch)
   (logit 2 "Generating extra opc.c stuff from " arch ".opc ...\n")
-  (read-cpu.opc srcdir arch "opc.c")
+  (read-cpu.opc opc-file "opc.c")
 )
-(define (gen-extra-asm.c srcdir arch)
+(define (gen-extra-asm.c opc-file arch)
   (logit 2 "Generating extra asm.c stuff from " arch ".opc ...\n")
-  (read-cpu.opc srcdir arch "asm.c")
+  (read-cpu.opc opc-file "asm.c")
 )
-(define (gen-extra-dis.c srcdir arch)
+(define (gen-extra-dis.c opc-file arch)
   (logit 2 "Generating extra dis.c stuff from " arch ".opc ...\n")
-  (read-cpu.opc srcdir arch "dis.c")
+  (read-cpu.opc opc-file "dis.c")
 )
-(define (gen-extra-ibld.h srcdir arch)
+(define (gen-extra-ibld.h opc-file arch)
   (logit 2 "Generating extra ibld.h stuff from " arch ".opc ...\n")
-  (read-cpu.opc srcdir arch "ibld.h")
+  (read-cpu.opc opc-file "ibld.h")
 )
-(define (gen-extra-ibld.c srcdir arch)
+(define (gen-extra-ibld.c opc-file arch)
   (logit 2 "Generating extra ibld.c stuff from " arch ".opc ...\n")
-  (read-cpu.opc srcdir arch "ibld.c")
+  (read-cpu.opc opc-file "ibld.c")
 )
 \f
 ; For debugging.
index 485541d..d6521e1 100644 (file)
@@ -913,17 +913,6 @@ Define a preprocessor-style macro.
               (cons (cons opt #f) (cdr argv))))))
 )
 
-; Convert old style option spec to new style.
-; This involves converting a symbol option name to a string.
-
-(define (-opt-spec-update spec-list)
-  (map (lambda (spec)
-        (if (symbol? (car spec))
-            (cons (symbol->string (car spec)) (cdr spec))
-            spec))
-       spec-list)
-)
-
 ; Used to ensure backtraces are printed if an error occurs.
 
 (define (catch-with-backtrace thunk)
@@ -1009,7 +998,7 @@ Define a preprocessor-style macro.
 ; arguments specified up til now, then continue with next batch of args".
 
 (define common-arguments
-  '(("-a" "arch"      "set arch, specifies name of .cpu file to load")
+  '(("-a" "arch-file" "specify path of .cpu file to load")
     ("-b" #f          "use debugging evaluator, for backtraces")
     ("-d" #f          "start interactive debugging session")
     ("-f" "flags"     "specify a set of flags to control code generation")
@@ -1023,6 +1012,12 @@ Define a preprocessor-style macro.
     )
 )
 
+; Accessors for application option specs
+(define (opt-get-first-pass opt)
+  (or (list-ref opt 3) (lambda args #f)))
+(define (opt-get-second-pass opt)
+  (or (list-ref opt 4) (lambda args #f)))
+
 ; Parse options and call generators.
 ; ARGS is a #:keyword delimited list of arguments.
 ; #:app-name name
@@ -1071,10 +1066,10 @@ Define a preprocessor-style macro.
       ; ARGS has been processed, now we can process ARGV.
 
       (let (
-           (opt-spec (append common-arguments (-opt-spec-update opt-spec)))
+           (opt-spec (append common-arguments opt-spec))
            (app-args nil)    ; application's args are queued here
            (repl? #f)
-           (arch #f)
+           (arch-file #f)
            (keep-mach "all") ; default is all machs
            (keep-isa "all")  ; default is all isas
            (flags "")
@@ -1093,7 +1088,7 @@ Define a preprocessor-style macro.
              ((missing) (cgen-usage 'missing arg opt-spec))
              (else
               (cond ((str=? "-a" (car opt))
-                     (set! arch arg)
+                     (set! arch-file arg)
                      )
                     ((str=? "-b" (car opt))
                      (if (memq 'debug-extensions *features*)
@@ -1158,12 +1153,12 @@ Define a preprocessor-style macro.
 
        ; All arguments have been parsed.
 
-       (if (not arch)
+       (if (not arch-file)
            (error "-a option missing, no architecture specified"))
 
        (if repl?
            (debug-repl nil))
-       (cpu-load (string-append srcdir "/cpu/" arch ".cpu")
+       (cpu-load arch-file
                  keep-mach keep-isa flags
                  app-init! app-finish! app-analyze!)
        ; Start another repl loop if -d.
@@ -1171,15 +1166,26 @@ Define a preprocessor-style macro.
        (if repl?
            (debug-repl nil))
 
-       ; Done with processing the arguments.  Call the application's
-       ; file generators.
+       ; Done with processing the arguments.
+       ; Application arguments are processed in two passes.
+       ; This is because the app may have arguments that specify things
+       ; that affect file generation (e.g. to specify another input file)
+       ; and we don't want to require an ordering of the options.
+
+       (for-each (lambda (opt-arg)
+                   (let ((opt (car opt-arg))
+                         (arg (cdr opt-arg)))
+                     (if (cadr opt)
+                         ((opt-get-first-pass opt) arg)
+                         ((opt-get-first-pass opt)))))
+                 (reverse app-args))
 
        (for-each (lambda (opt-arg)
                    (let ((opt (car opt-arg))
                          (arg (cdr opt-arg)))
                      (if (cadr opt)
-                         ((cadddr opt) arg)
-                         ((cadddr opt)))))
+                         ((opt-get-second-pass opt) arg)
+                         ((opt-get-second-pass opt)))))
                  (reverse app-args))
        )
       )