Index: cgen/decode.scm =================================================================== RCS file: /cvs/src/src/cgen/decode.scm,v retrieving revision 1.9 diff -c -p -r1.9 decode.scm *** cgen/decode.scm 21 Oct 2003 16:42:00 -0000 1.9 --- cgen/decode.scm 28 Jan 2004 18:15:11 -0000 *************** *** 1,5 **** ; Application independent decoder support. ! ; Copyright (C) 2000 Red Hat, Inc. ; This file is part of CGEN. ; ; This file provides utilities for building instruction set decoders. --- 1,5 ---- ; Application independent decoder support. ! ; Copyright (C) 2000, 2004 Red Hat, Inc. ; This file is part of CGEN. ; ; This file provides utilities for building instruction set decoders. *************** *** 433,462 **** (letrec ((opcode (insn-value insn)) (insn-len (insn-base-mask-length insn)) (decode-len (length bitnums)) ! (compute (lambda (val insn-len decode-len bl) ;(display (list val insn-len decode-len bl)) (newline) ; Oh My God. This isn't tail recursive. (if (null? bl) 0 ! (+ (if (> (car bl) insn-len) ! 0 ! (if (bit-set? val ! (if lsb0? ! (car bl) ! (- insn-len (car bl) 1))) ! (integer-expt 2 (- (length bl) 1)) ! 0)) ! (compute val insn-len decode-len (cdr bl))))))) ! (let* ((opcode (compute (insn-value insn) insn-len decode-len bitnums)) ! (opcode-mask (compute (insn-base-mask insn) insn-len decode-len bitnums)) (indices (missing-bit-indices opcode-mask (- (integer-expt 2 decode-len) 1)))) (logit 3 "insn =" (obj:name insn) ! " insn-value=" (insn-value insn) ! " insn-base-mask=" (insn-base-mask insn) " insn-len=" insn-len " decode-len=" decode-len ! " opcode=" opcode ! " opcode-mask=" opcode-mask " indices=" indices "\n") (map (lambda (index) (+ opcode index)) indices))) ) --- 433,462 ---- (letrec ((opcode (insn-value insn)) (insn-len (insn-base-mask-length insn)) (decode-len (length bitnums)) ! (compute (lambda (val insn-len decode-len bl default) ;(display (list val insn-len decode-len bl)) (newline) ; Oh My God. This isn't tail recursive. (if (null? bl) 0 ! (+ (if (or (and (>= (car bl) insn-len) (= default 1)) ! (and (< (car bl) insn-len) ! (bit-set? val ! (if lsb0? ! (car bl) ! (- insn-len (car bl) 1))))) ! (integer-expt 2 (- (length bl) 1)) ! 0) ! (compute val insn-len decode-len (cdr bl) default)))))) ! (let* ((opcode (compute (insn-value insn) insn-len decode-len bitnums 0)) ! (opcode-mask (compute (insn-base-mask insn) insn-len decode-len bitnums 1)) (indices (missing-bit-indices opcode-mask (- (integer-expt 2 decode-len) 1)))) (logit 3 "insn =" (obj:name insn) ! " insn-value=" (number->hex (insn-value insn)) ! " insn-base-mask=" (number->hex (insn-base-mask insn)) " insn-len=" insn-len " decode-len=" decode-len ! " opcode=" (number->hex opcode) ! " opcode-mask=" (number->hex opcode-mask) " indices=" indices "\n") (map (lambda (index) (+ opcode index)) indices))) )