From: Douglas K. <sn...@us...> - 2015-04-25 00:27:07
|
The branch "master" has been updated in SBCL: via 6d29a65afa98f36a19b58831a01453d23d8708db (commit) from 7014958ab489a3e77e7860d7860c2463820e417d (commit) - Log ----------------------------------------------------------------- commit 6d29a65afa98f36a19b58831a01453d23d8708db Author: Douglas Katzman <do...@go...> Date: Fri Apr 24 20:05:20 2015 -0400 x86-64: Fix MOVNTI encoder/printer which never worked right. --- src/compiler/x86-64/insts.lisp | 5 +-- tests/assembler.pure.lisp | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/compiler/x86-64/insts.lisp b/src/compiler/x86-64/insts.lisp index ff2940a..04f4812 100644 --- a/src/compiler/x86-64/insts.lisp +++ b/src/compiler/x86-64/insts.lisp @@ -3724,14 +3724,13 @@ (define-sse-inst-implicit-mask blendvps #x66 #x38 #x14) (define-sse-inst-implicit-mask blendvpd #x66 #x38 #x15)) -;; FIXME: is that right!? (define-instruction movnti (segment dst src) - (:printer ext-reg-reg/mem-no-width ((op #xc3))) + (:printer ext-reg-reg/mem-no-width ((op #xc3)) '(:name :tab reg/mem ", " reg)) (:emitter (aver (not (or (register-p dst) (xmm-register-p dst)))) (aver (register-p src)) - (maybe-emit-rex-for-ea segment src dst) + (maybe-emit-rex-for-ea segment dst src) (emit-byte segment #x0f) (emit-byte segment #xc3) (emit-ea segment dst (reg-tn-encoding src)))) diff --git a/tests/assembler.pure.lisp b/tests/assembler.pure.lisp new file mode 100644 index 0000000..c4cb4ca --- /dev/null +++ b/tests/assembler.pure.lisp @@ -0,0 +1,42 @@ +;;;; tests for assembler/disassembler + +;;;; This software is part of the SBCL system. See the README file for +;;;; more information. +;;;; +;;;; While most of SBCL is derived from the CMU CL system, the test +;;;; files (like this one) were written from scratch after the fork +;;;; from CMU CL. +;;;; +;;;; This software is in the public domain and is provided with +;;;; absolutely no warranty. See the COPYING and CREDITS files for +;;;; more information. + +(in-package sb-vm) + +(load "test-util.lisp") +(use-package :test-util) + +;; this is architecture-agnostic +(defun test-assemble (inst expect) + (let ((segment (sb-assem:make-segment :type :regular))) + (apply (symbolicate (car inst) "-INST-EMITTER") segment nil (cdr inst)) + (let* ((buf (sb-assem::segment-buffer segment)) + (string + (with-output-to-string (stream) + (with-pinned-objects (buf) + (let ((sb-disassem:*disassem-location-column-width* 0)) + (sb-disassem:disassemble-memory + (sap-int (vector-sap buf)) + (sb-assem::segment-current-posn segment) + :stream stream)))))) + (assert (string= (subseq string (1+ (position #\newline string)) + (1- (length string))) ; chop final newline + expect))))) + +(with-test (:name :assemble-movti-instruction :skipped-on '(not :x86-64)) + (flet ((test-movnti (dst src expect) + (test-assemble `(movnti ,dst ,src) expect))) + (test-movnti (make-ea :dword :base rdi-tn :disp 57) eax-tn + "; 0FC34739 MOVNTI [RDI+57], EAX") + (test-movnti (make-ea :qword :base rax-tn) r12-tn + "; 4C0FC320 MOVNTI [RAX], R12"))) ----------------------------------------------------------------------- hooks/post-receive -- SBCL |