Code Search for Developers
 
 
  

sim-test.scm from Gdb at Krugle


Show sim-test.scm syntax highlighted

; CPU description file generator for the simulator testsuite.
; Copyright (C) 2000 Red Hat, Inc.
; This file is part of CGEN.
; See file COPYING.CGEN for details.

; This is invoked to build allinsn.exp and a script to run to
; generate allinsn.s and allinsn.d.

; Specify which application.
(set! APPLICATION 'SIM-TEST)

; Called before/after the .cpu file has been read.

(define (sim-test-init!) (opcodes-init!))
(define (sim-test-finish!) (opcodes-finish!))

; Called after .cpu file has been read and global error checks are done.
; We use the `tmp' member to record the syntax split up into its components.

(define (sim-test-analyze!)
  (opcodes-analyze!)
  (map (lambda
	   (insn) (elm-xset! insn 'tmp (syntax-break-out (insn-syntax insn))))
       (current-insn-list))
  *UNSPECIFIED*
)

; Methods to compute test data.
; The result is a list of strings to be inserted in the assembler
; in the operand's position.

(method-make!
 <hw-asm> 'test-data
 (lambda (self n)
   ; FIXME: floating point support
   (let ((signed (list 0 1 -1 2 -2))
	 (unsigned (list 0 1 2 3 4))
	 (mode (elm-get self 'mode)))
     (map number->string
	  (list-take n
		     (if (eq? (mode:class mode) 'UINT)
			 unsigned
			 signed)))))
)

(method-make!
 <keyword> 'test-data
 (lambda (self n)
   (let* ((values (elm-get self 'values))
	  (n (min n (length values))))
     ; FIXME: Need to handle mach variants.
     (map car (list-take n values))))
)

(method-make!
 <hw-address> 'test-data
 (lambda (self n)
   (let ((test-data '("foodata" "4" "footext" "-4")))
     (list-take n test-data)))
)

(method-make!
 <hw-iaddress> 'test-data
 (lambda (self n)
   (let ((test-data '("footext" "4" "foodata" "-4")))
     (list-take n test-data)))
)

(method-make-forward! <hw-register> 'indices '(test-data))
(method-make-forward! <hw-immediate> 'values '(test-data))

; This can't use method-make-forward! as we need to call op:type to
; resolve the hardware reference.

(method-make!
 <operand> 'test-data
 (lambda (self n)
   (send (op:type self) 'test-data n))
)

; Given an operand, return a set of N test data.
; e.g. For a keyword operand, return a random subset.
; For a number, return N numbers.

(define (operand-test-data op n)
  (send op 'test-data n)
)

; Given the broken out assembler syntax string, return the list of operand
; objects.

(define (extract-operands syntax-list)
  (let loop ((result nil) (l syntax-list))
    (cond ((null? l) (reverse result))
	  ((object? (car l)) (loop (cons (car l) result) (cdr l)))
	  (else (loop result (cdr l)))))
)

; Given a list of operands for an instruction, return the test set
; (all possible combinations).
; N is the number of testcases for each operand.
; The result has N to-the-power (length OP-LIST) elements.

(define (build-test-set op-list n)
  (let ((test-data (map (lambda (op) (operand-test-data op n)) op-list))
	(len (length op-list)))
    ; FIXME: Make slicker later.
    (cond ((=? len 0) (list (list)))
	  ((=? len 1) test-data)
	  (else (list (map car test-data)))))
)

; Given an assembler expression and a set of operands build a testcase.
; SYNTAX-LIST is a list of syntax elements (characters) and <operand> objects.
; TEST-DATA is a list of strings, one element per operand.
; FIXME: wip

(define (build-sim-testcase syntax-list test-data)
  (logit 3 "Building a testcase for: "
	 (map (lambda (sl)
		(string-append " "
			       (cond ((string? sl)
				      sl)
				     ((operand? sl)
				      (obj:name sl))
				     (else
				      (with-output-to-string
					(lambda () (display sl)))))))
	      syntax-list)
	 ", test data: "
	 (map (lambda (td) (list " " td))
	      test-data)
	 "\n")
  (let loop ((result nil) (sl syntax-list) (td test-data))
    ;(display (list result sl td "\n"))
    (cond ((null? sl)
	   (string-append "\t"
			  (apply string-append (reverse result))
			  "\n"))
	  ((string? (car sl))
	   (loop (cons (car sl) result) (cdr sl) td))
	  (else (loop (cons (car td) result) (cdr sl) (cdr td)))))
)

; Generate a set of testcases for INSN.
; FIXME: wip

(define (gen-sim-test insn)
  (logit 2 "Generating sim test set for " (obj:name insn) " ...\n")
  (string-append
   "\t.global " (gen-sym insn) "\n"
   (gen-sym insn) ":\n"
   (let* ((syntax-list (insn-tmp insn))
	  (op-list (extract-operands syntax-list))
	  (test-set (build-test-set op-list 2)))
     (string-map (lambda (test-data)
		   (build-sim-testcase syntax-list test-data))
		 test-set))
   )
)

; Generate the shell script that builds the .cgs files.
; .cgs are .s files except that there may be other .s files in the directory
; and we want the .exp driver script to easily find the files.
;
; Eventually it would be nice to generate as much of the testcase as possible.
; For now we just generate the template and leave the programmer to fill in
; the guts of the test (i.e. set up various registers, execute the insn to be
; tested, and then verify the results).
; Clearly some hand generated testcases will also be needed, but this
; provides a good start for each instruction.

(define (cgen-build.sh)
  (logit 1 "Generating sim-build.sh ...\n")
  (string-append
   "\
#/bin/sh
# Generate test result data for " (current-arch-name) " simulator testing.
# This script is machine generated.
# It is intended to be run in the testsuite source directory.
#
# Syntax: /bin/sh sim-build.sh

# Put results here, so we preserve the existing set for comparison.
rm -rf tmpdir
mkdir tmpdir
cd tmpdir
\n"

    (string-map (lambda (insn)
		  (string-append
		   "cat <<EOF > " (gen-file-name (obj:name insn)) ".cgs\n"
		   ; FIXME: Need to record assembler line comment char in .cpu.
		   "# " (current-arch-name) " testcase for " (backslash "$" (insn-syntax insn)) " -*- Asm -*-\n"
		   "# mach: "
		   (let ((machs (insn-machs insn)))
		     (if (null? machs)
			 "all"
			 (string-drop1 (string-map (lambda (mach)
						     (string-append "," mach))
						   machs))))
		   "\n\n"
		   "\t.include \"testutils.inc\"\n\n"
		   "\tstart\n\n"
		   (gen-sim-test insn)
		   "\n\tpass\n"
		   "EOF\n\n"))
		(non-alias-insns (current-insn-list)))
   )
)

; Generate the dejagnu allinsn.exp file that drives the tests.

(define (cgen-allinsn.exp)
  (logit 1 "Generating sim-allinsn.exp ...\n")
  (string-append
   "\
# " (string-upcase (current-arch-name)) " simulator testsuite.

if [istarget " (current-arch-name) "*-*-*] {
    # load support procs (none yet)
    # load_lib cgen.exp

    # all machines
    set all_machs \""
   (string-drop1 (string-map (lambda (m)
			       (string-append " "
					      (gen-sym m)))
			     (current-mach-list)))
   "\"

    # The .cgs suffix is for \"cgen .s\".
    foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
	# If we're only testing specific files and this isn't one of them,
	# skip it.
	if ![runtest_file_p $runtests $src] {
	    continue
	}

	run_sim_test $src $all_machs
    }
}\n"
   )
)




See more files for this project here

Gdb

GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it executes -- or what another program was doing at the moment it crashed.

Project homepage: http://sources.redhat.com/gdb/
Programming language(s): Assembly,C,C++,Expect
License: other

  cpu/
    arm.cpu
    arm.sim
    arm7.cpu
    fr30.cpu
    fr30.opc
    i960.cpu
    i960.opc
    ia32.cpu
    ia64.cpu
    ip2k.cpu
    ip2k.opc
    iq10.cpu
    iq2000.cpu
    iq2000.opc
    iq2000m.cpu
    m32r.cpu
    m32r.opc
    m68k.cpu
    openrisc.cpu
    openrisc.opc
    play.cpu
    powerpc.cpu
    sh-sid.cpu
    sh-sim.cpu
    sh.cpu
    sh.opc
    sh64-compact.cpu
    sh64-media.cpu
    simplify.inc
    sparc.cpu
    sparc.opc
    sparc32.cpu
    sparc64.cpu
    sparccom.cpu
    sparcfpu.cpu
    thumb.cpu
    xc16x.cpu
    xc16x.opc
    xstormy16.cpu
    xstormy16.opc
  doc/
    Makefile.am
    Makefile.in
    app.texi
    cgen.texi
    credits.texi
    glossary.texi
    internals.texi
    intro.texi
    notes.texi
    opcodes.texi
    pmacros.texi
    porting.texi
    rtl.texi
    running.texi
    sim.texi
    stamp-vti
    version.texi
  slib/
    genwrite.scm
    logical.scm
    pp.scm
    random.scm
    sort.scm
  AUTHORS
  COPYING.CGEN
  ChangeLog
  INSTALL
  Makefile.am
  Makefile.in
  NEWS
  README
  aclocal.m4
  attr.scm
  cgen-doc.scm
  cgen-gas.scm
  cgen-opc.scm
  cgen-sid.scm
  cgen-sim.scm
  cgen-stest.scm
  configure
  configure.in
  cos-pprint.scm
  cos.scm
  decode.scm
  desc-cpu.scm
  desc.scm
  dev.scm
  enum.scm
  gas-test.scm
  gen-all-doc
  gen-all-opcodes
  gen-all-sid
  gen-all-sim
  guile.scm
  hardware.scm
  html.scm
  ifield.scm
  iformat.scm
  insn.scm
  mach.scm
  minsn.scm
  mode.scm
  model.scm
  opc-asmdis.scm
  opc-ibld.scm
  opc-itab.scm
  opc-opinst.scm
  opcodes.scm
  operand.scm
  pgmr-tools.scm
  pmacros.scm
  pprint.scm
  profile.scm
  read.scm
  rtl-c.scm
  rtl-traverse.scm
  rtl.scm
  rtx-funcs.scm
  sem-frags.scm
  semantics.scm
  sid-cpu.scm
  sid-decode.scm
  sid-model.scm
  sid.scm
  sim-arch.scm
  sim-cpu.scm
  sim-decode.scm
  sim-model.scm
  sim-test.scm
  sim.scm
  stamp-h.in
  types.scm
  utils-cgen.scm
  utils-gen.scm
  utils-sim.scm
  utils.scm