From 5f735a2c8b9a7f7c1a6879cfa95dd8ce8656a52e Mon Sep 17 00:00:00 2001 From: Dave Brolley Date: Wed, 22 May 2002 18:43:32 +0000 Subject: [PATCH] 2002-05-21 Dave Brolley * decode.scm (-opcode-slots): Don't consider bits beyond the length of the insn. --- ChangeLog | 5 +++++ decode.scm | 16 +++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 084203b..3e220f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-05-21 Dave Brolley + + * decode.scm (-opcode-slots): Don't consider bits beyond the length of + the insn. + 2002-05-17 Johan Rydberg * cpu/powerpc.cpu: New file. diff --git a/decode.scm b/decode.scm index 66ed7c8..57c87d4 100644 --- a/decode.scm +++ b/decode.scm @@ -437,17 +437,19 @@ ; Oh My God. This isn't tail recursive. (if (null? bl) 0 - (+ (if (bit-set? val - (if lsb0? - (car bl) - (- insn-len (car bl) 1))) - (integer-expt 2 (- (length bl) 1)) - 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) " opcode=" opcode " indices=" indices "\n") + (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))) ) -- 2.43.5