[movitz-cvs] CVS ia-x86
ffjeld
ffjeld at common-lisp.net
Thu Dec 20 22:41:55 UTC 2007
Update of /project/movitz/cvsroot/ia-x86
In directory clnet:/tmp/cvs-serv19184
Modified Files:
codec.lisp
Log Message:
Testing new assembler.
--- /project/movitz/cvsroot/ia-x86/codec.lisp 2007/02/26 22:14:00 1.8
+++ /project/movitz/cvsroot/ia-x86/codec.lisp 2007/12/20 22:41:55 1.9
@@ -9,7 +9,7 @@
;;;; Created at: Thu May 4 15:16:45 2000
;;;; Distribution: See the accompanying file COPYING.
;;;;
-;;;; $Id: codec.lisp,v 1.8 2007/02/26 22:14:00 ffjeld Exp $
+;;;; $Id: codec.lisp,v 1.9 2007/12/20 22:41:55 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -645,16 +645,40 @@
teo-list))
(defun instruction-encode (instr env &optional (optimize-teo-fn #'optimize-teo-smallest))
- (let ((teo-list (instruction-encode-to-teo instr env)))
- (if (null teo-list)
- (error "Unable to encode ~A." instr)
- (let ((teo (if (instruction-user-size instr)
- (optimize-teo-user-size teo-list instr env)
- (funcall optimize-teo-fn teo-list instr env))))
- (if (not (teo-p teo))
- (error "Optimization with ~S of instruction ~S failed for teo-list ~S"
- optimize-teo-fn instr teo-list)
- (instruction-encode-from-teo instr teo env))))))
+ (let ((old-cbyte
+ (let ((teo-list (instruction-encode-to-teo instr env)))
+ (if (null teo-list)
+ (error "Unable to encode ~A." instr)
+ (let ((teo (if (instruction-user-size instr)
+ (optimize-teo-user-size teo-list instr env)
+ (funcall optimize-teo-fn teo-list instr env))))
+ (if (not (teo-p teo))
+ (error "Optimization with ~S of instruction ~S failed for teo-list ~S"
+ optimize-teo-fn instr teo-list)
+ (instruction-encode-from-teo instr teo env)))))))
+ #+ignore
+ (when (gethash (find-symbol (string (type-of instr))
+ :keyword)
+ asm-x86::*instruction-encoders*)
+ (with-simple-restart (continue "Ignore asm-x86 check.")
+ (handler-case (let* ((string (let ((*package* (find-package :ia-x86-instr)))
+ (write-to-string instr :readably t)))
+ (expr (let ((*package* (find-package :keyword)))
+ (read-from-string string)))
+ (old-code (loop for b downfrom (1- (imagpart old-cbyte)) to 0
+ collect (ldb (byte 8 (* 8 b))
+ (realpart old-cbyte))))
+ (new-code (asm-x86::encode-instruction expr
+ :symtab (when env (assemble-env-symtab env))
+ :cpu-mode *cpu-mode*)))
+ (loop while (and (cdr old-code)
+ (eql #x90 (car old-code)))
+ do (pop old-code))
+ (unless (equal old-code new-code)
+ (break "asm fail: ~A: (~{#x~X~^ ~}) vs. (~{#x~X~^ ~})." expr old-code new-code)))
+ (asm:unresolved-symbol (c)
+ (warn (princ-to-string c))))))
+ old-cbyte))
;;;
@@ -673,12 +697,12 @@
(let ((old-byte (realpart cdatum))
(numo (imagpart cdatum)))
(cond
- ((= 0 numo)
+ ((zerop numo)
0)
((zerop (ldb (byte 1 (1- (* 8 numo))) old-byte))
cdatum)
(t (complex (- old-byte (dpb 1 (byte 1 (* 8 numo)) 0))
- numo)))))
+ numo)))))
(defun sign-extend (old-byte numo)
"Given a two's complement signed byte (where the most significant
More information about the Movitz-cvs
mailing list