1.0.16.35: improved TIME output
[sbcl.git] / src / compiler / x86-64 / insts.lisp
index 5937993..75cf555 100644 (file)
   (accum :type 'accum)
   (imm))
 
+(sb!disassem:define-instruction-format (two-bytes 16
+                                        :default-printer '(:name))
+  (op :fields (list (byte 8 0) (byte 8 8))))
+
 ;;; A one-byte instruction with a #x66 prefix, used to indicate an
 ;;; operand size of :word.
 (sb!disassem:define-instruction-format (x66-byte 16
                                             (- (label-position where)
                                                (+ posn 4))))))
      (fixup
-      (emit-byte segment #b11101000)
-      (emit-relative-fixup segment where))
+      ;; There is no CALL rel64...
+      (error "Cannot CALL a fixup: ~S" where))
      (t
       (maybe-emit-rex-for-ea segment where nil :operand-size :do-not-set)
       (emit-byte segment #b11111111)
           (emit-byte segment #b11111111)
           (emit-ea segment where #b100)))))
 
-(define-instruction jmp-short (segment label)
-  (:emitter
-   (emit-byte segment #b11101011)
-   (emit-byte-displacement-backpatch segment label)))
-
 (define-instruction ret (segment &optional stack-delta)
   (:printer byte ((op #b11000011)))
   (:printer byte ((op #b11000010) (imm nil :type 'imm-word-16))
          (t
           (emit-byte segment #b11000011)))))
 
-(define-instruction jecxz (segment target)
+(define-instruction jrcxz (segment target)
   (:printer short-jump ((op #b0011)))
   (:emitter
    (emit-byte segment #b11100011)
    (emit-byte segment #x0f)
    (emit-byte segment #xae)
    (emit-ea segment dst 3)))
+
+;;;; Miscellany
+
+(define-instruction cpuid (segment)
+  (:printer two-bytes ((op '(#b00001111 #b10100010))))
+  (:emitter
+   (emit-byte segment #b00001111)
+   (emit-byte segment #b10100010)))
+
+(define-instruction rdtsc (segment)
+  (:printer two-bytes ((op '(#b00001111 #b00110001))))
+  (:emitter
+   (emit-byte segment #b00001111)
+   (emit-byte segment #b00110001)))