Friday, March 14

Emacs Selectors

One of the nicer things that comes with slime is the slime-selector: it's just a little buffer switching thing, that lets you press r to switch to the repl buffer, d to switch to the debugger buffer, s to switch to the scratch buffer and so forth. Bound to a function key, it's an extraordinarily convenient way of switching to a specific buffer.



Of course, it's geared to SLIME and Lisp, but when coding C++ on the day job I often find myself switching between code, the debugger, shell and compilation buffer, so without further ado, here is the C equivalent, which is easily hacked up to include other buffers, too: actually, I'm beginning to think something like this functionality should be in emacs by default, as it eliminates a lot of keyboard gymnastics.







;; slime selector clone for c ----------------------------------

(defvar c-selector-methods nil)

(defun c-selector ()
(interactive)
(message "Select [%s]: "
(apply #'string (mapcar #'car c-selector-methods)))
(let* ((ch (save-window-excursion
(select-window (minibuffer-window))
(read-char)))
(method (find ch c-selector-methods :key #'car)))
(cond ((null method)
(message (format "No method for charachter: %s" ch))
(ding)
(sleep-for 1)
(discard-input)
(c-selector))
(t
(funcall (third method))))))


(defmacro def-c-selector-method (key description &rest body)
`(setq c-selector-methods
(sort* (cons (list ,key ,description
(lambda ()
(let ((buffer (progn ,@body)))
(cond ((get-buffer buffer)
(switch-to-buffer buffer))
(t
(message "No such buffer")
(ding))))))
(remove* ,key c-selector-methods :key #'car))
#'< :key #'car)))

(def-c-selector-method ?d "GDB debugger buffer"
gud-comint-buffer)

(def-c-selector-method ?g "Grep buffer"
grep-last-buffer)

(def-c-selector-method ?l "Buffer List"
(let ((result (get-buffer "*buffer-selection*")))
(if result
result
((bs-show)
(get-buffer "*buffer-selection*")))))

(def-c-selector-method ?c "Compilation buffer"
(let ((result (get-buffer "*compilation*")))
(if result
result
(compilation-find-buffer))))

(def-c-selector-method ?s "Shell buffer"
(get-buffer "*shell*"))

Friday, February 22

ASDF for the slightly confused

Well, you have a shiny new lisp compiler/interpreter/environment on your machine, and like an eager and smart newbie you want to do something with it. Right there and then many lisp newbies go SPLAT and end up as a bug on a windscreen, later to be scraped off and fed to Guido's pet snake. So here is ASDF for confused newbies (a very different proposition from a dummy, who should go back to reading bright yellow paperbacks and programming Java in the enterprise shop window).


ASDF is about 500 lines of lisp source, and a dot asd file is the lisp equivalent of the ubqutious make; you can't do anything in a serious modern lisp environment without it, so lets take you through it step by step. An asd file describes a system that contains modules and components. Components are usually individual files. Modules are collections of files, usually in subdirectories. Let's look at an example dot asd file: this one is for cowl - a simple opengl gui written by William Robinson who is working on Cityscape, a promising
game found at this address.


(defsystem #:cowl-ftgl
:depends-on (#:cffi)
:description "FTGL Common Lisp wrapper for Cowl."
:components ((:module "src"
:components
((:file "cowl-ftgl")))))


The defsystem form then defines a system with one component which is a module called src which in turn contains one component in a file called cowl-ftgl, which will be a lisp file, naturally: since it's in a module called src, it will be loaded in the src directory below the directory that holds the dot asd file. Sometimes it is necessary to wrap the defsystem form in it's own package using defpackage and a throwaway package name. We do not do that here because we do not define any symbols that we would need to refer to externally, but we would need to if we were defining new component classes or methods to be used in the system, examples of which will follow later in the article.


Components, modules and systems are defined as CLOS objects in asdf.lisp, so of course they can be operated upon with generic functions, and there are quite a few that come with asdf. The key one is named with Arc-like gnomicness: "oos" - which I imagine is short for "Operate on System". It takes at least two parameters: the operation to perform and the system to perform it on.


The operation you are most likely to perfom is load-op: this loads and compiles a system, and the form is simply:


(asdf:oos 'asdf:load-op 'system-name)

Other operations are compile-op, and test-op: the latter will only have meaning if the author of your system has provided tests, as some packages do.


ASDF will search for systems using the list of functions referred to by *system-definition-search-functions* used to search for .asd files in the filesystem. By default this contains only one function, (sysdef-central-registry-search) which is perfectly adequate for file systems with symbolic links. The modus operandi on such system is to have a share/common-lisp/systems directory populated with symbolic links to dot asd files which may be downloaded and untarred in any part of the fs tree to which the user has access. Then the (sysdef-central-registry-search) scans the list of directories referred to by *central-registry* for dot asd files containing the system which it needs to operate on.



To put it another way, procedurally this translates to:


  1. Download your asdf package

  2. Unzip - say to ~/thinngy/cl-blab

  3. Note that ~/thinngy/cl-blab/cl-blab.asd is the system.

  4. Create a ~/share/common-lisp/systems directory for systems
  5. cd ~/share/common-lisp/system
  6. ln -s ~/thinggy/cl-blab/cl-blab.asd cl-blab.asd
  7. now fire up your lisp and enter..

    ;; for systems that don't do (require 'asdf)
    (load #"/path/to/asdf.lisp")

    ;; the / on the end of the path is important, don't forget it
    (push #"/home/me/share/common-lisp/systems/" asdf:*central-registry*)

    (asdf:oos 'asdf:load-op 'cl-blab)

For Windows the situation is sligtly more complicated: either you write your own search function *or*, more practically apply a patch that lets you use shortcuts in place of symlinks.



You'd be right to point out that this is on the laborious side, but the purpose of this article is to demonstrate how asdf *works*. There are two packages for automating lisp package and asdf system installation: asdf-install and clbuild, which I encourage newbies to investigate, in the usual sadistic exercise for the reader.



Why go through all this palaver with asdf? Well the beauty of asdf is that systems, components and modules are in fact CLOS objects, so we can do tricks like this:




(cffi:load-foreign-library
(make-pathname
:name "cftgl"
:type "so"
:directory (directory-namestring (asdf:component-pathname
(asdf:find-system :cowl-ftgl)))))

..which loads "clftgl.so" which is found in the same directory as the dot asd file containing the system definition. Highly useful when distributing a C shared lib that wraps a C++ library so that it can be called into from Lisp.


The fact that source files are component, lets us write specialist methods for different kinds of source file such as c-source-file, java-source-file, html-file (all defined in asdf.lisp) allows asdf to work as a make replacement, operating on non-lisp source, thus:



(defmethod output-files ((op compile-op) (c c-source-file))
(list (make-pathname :type "o" :defaults
(component-pathname c))))

(defmethod perform ((op compile-op) (c c-source-file))
(unless
(= 0 (run-shell-command "/usr/bin/gcc -fPIC -o ~S -c ~S"
(unix-name (car (output-files op c)))
(unix-name (component-pathname c))))
(error 'operation-error :operation op :component c)))

(defmethod perform ((operation load-op) (c c-source-file))
t)

There is an extended example of this kind of thing where asdf is extended to work with a fortran to lisp converter here.

To conclude: like many things in Lisp, asdf is prickly for newbies and takes time to get to know and use well. However, when you do you can do things with it for which you'd normally need another build system, independent of your language. As Brucio would observe: Lisp does not have this limitation and Common Lispers laugh at things like ant.

Friday, December 28

Hippie Expand and Autocompletion in Emacs

The Emacs way of doing auto - completion is known as Hippie Expand which is a function that uses a variety of methods to try and expand an incomplete word near the point. Why it's called Hippie Expand I have no idea. The name is a bit misleading; for a long time I thought it was related to zippy or pinhead. Perhaps it's something to do with Emacs being used and written by hippies, who knows?


The nice thing about hippie expand is that like many things in Emacs, it can be customized and expanded, via the make-hippie-expand function. For instance, here is the hippie-expand function I use for c-mode



(make-hippie-expand-function
'(try-expand-dabbrev-visible
try-expand-dabbrev-from-kill
try-expand-dabbrev-all-buffers
try-complete-file-name-partially
try-complete-file-name)))))

This function first tries to expand the thing found at the point as a dynamic abbreviation, which is based on a scan of existing text for words or symbols with the same beginning as the one at the point. For instance, if "catalogue" is in the buffer, and you expand "cat", then "catalogue" will be one of the expansions offered, which is useful if "catalogue" is a variable name you use a lot.


The hippie expand function is bound to a key (I use M-/) and each press of that key will cycle through the possible completions for you. It's not Intellisense, but it does cut down on typing if you use descriptive variable names.


It's also fairly trivial to write your own hippie-expand function. Here is an example of a hippie expand function which does completion based on a list of current tags - which are sometimes more useful than dabbrevs.



;; This is a simple function to return the point at the beginning of the symbol to be completed
(defun he-tag-beg ()
(let ((p
(save-excursion
(backward-word 1)
(point))))
p))

;; The actual expansion function
(defun try-expand-tag (old)
;; old is true if we have already attempted an expansion
(unless old
;; he-init-string is used to capture the string we are trying to complete
(he-init-string (he-tag-beg) (point))
;; he-expand list is the list of possible expansions
(setq he-expand-list (sort
(all-completions he-search-string 'tags-complete-tag) 'string-lessp)))
;; now we go through the list, looking for an expansion that isn't in the table of previously
;; tried expansions
(while (and he-expand-list
(he-string-member (car he-expand-list) he-tried-table))
(setq he-expand-list (cdr he-expand-list)))
;; if we didn't have any expansions left, reset the expansion list
(if (null he-expand-list)
(progn
(when old (he-reset-string))
())
;; otherwise offer the expansion at the head of the list
(he-substitute-string (car he-expand-list))
;; and put that expansion into the tried expansions list
(setq he-expand-list (cdr he-expand-list))
t))
;; done, now we just use it as a clause in our make-hippie-expand-function (as above)


Hippie-expand isn't the only auto-completion gizmo I work with in Emacs; there is also slime-complete-symbol which does symbol completion for my while I am working in SLIME. This can be neatly integrated into hippie-expand, like so..


;; hippie expand slime symbol
(defun he-slime-symbol-beg ()
(let ((p
(slime-symbol-start-pos)))
p))

(defun try-expand-slime-symbol (old)
(unless old
(he-init-string (he-slime-symbol-beg) (point))
(setq he-expand-list (sort
(car (slime-contextual-completions (slime-symbol-start-pos) (slime-symbol-end-pos))) 'string-lessp)))
(while (and he-expand-list
(he-string-member (car he-expand-list) he-tried-table))
(setq he-expand-list (cdr he-expand-list)))
(if (null he-expand-list)
(progn
(when old (he-reset-string))
())
(he-substitute-string (car he-expand-list))
(setq he-expand-list (cdr he-expand-list))
t))

EDIT: With newer (CVS and 3.0) versions of SLIME the api for symbol completion
has changed and the hippie-expand function for slime symbol completion is..


;; hippie expand slime symbol
(defun he-slime-symbol-beg ()
(let ((p
(slime-symbol-start-pos)))
p))

(defun try-expand-slime-symbol (old)
(unless old
(he-init-string (he-slime-symbol-beg) (point))
(setq he-expand-list (sort
(car (slime-simple-completions
(buffer-substring-no-properties (slime-symbol-start-pos) (slime-symbol-end-pos))))
'string-lessp)))
(while (and he-expand-list
(he-string-member (car he-expand-list) he-tried-table))
(setq he-expand-list (cdr he-expand-list)))
(if (null he-expand-list)
(progn
(when old (he-reset-string))
())
(he-substitute-string (car he-expand-list))
(setq he-expand-list (cdr he-expand-list))
t))

Thursday, December 20

Final Results of Informal Programming Language Comparison.

A recent post on programming.reddit.com about profanity in comments was highly amusing if you are childish enough to be amused by such things - I am, anyway - set me to thinking about the Google Code search thing and whether it could be used in any profitable way to compare programming languages. I quicky hit upon the hypothesis that programmers content with their language would be more likely to type comments along the lines of "this rocks" and ones more disaffected might type comments along the lines of "this sucks".


Hence, all that was required was to write a bit of code to tabutlate the search results by language and a clear winner would emerge. It did, and it wasn't the one I was expecting.


My final choice of metric was the ratio of incidence of the word "sucks" and the word "rocks" scaled by the frequency of a netural control word such as "okay" (and even so, poor old FORTH did not get a lookin as it got zero hits on any of these). I call this the suckage to rockage ration and henceforth regard it as the gold standard of programming metrics. Without further ado, here are the charts and the code.




Controversy is roughly the distance between suckage and rockage - high if the language arouses strong feelings, low if it's boring, staple stuff.




C!? I really didn't expect this. It might be due to the inability of the search to separate out C and C++. It's almost certianly due to a low suckage rather than a high rockage.



The code, which is Public Domain, if anyone is inclined to tinker.



(asdf:oos 'asdf:load-op 'drakma)
(asdf:oos 'asdf:load-op 's-xml)
(asdf:oos 'asdf:load-op 'clot)

(defpackage :code-index (:use :cl :clot :drakma :s-xml))

(in-package :code-index)

(defun code-search (regexp &key language license file package (output-type :sxml))
(let ((url (concatenate 'string
"http://google.com/codesearch/feeds/search?q="
(when language (concatenate 'string "lang:" language "+"))
(when license (concatenate 'string "license:" license "+"))
(when file (concatenate 'string "file:" file "+"))
(when package (concatenate 'string "package:" package "+"))
regexp)))
(multiple-value-bind (body-or-stream status-code headers uri stream must-close reason-phrase)
(drakma::http-request url
:force-binary t)
(declare (ignore headers must-close stream reason-phrase))
(format t "Request for ~A~%" uri)
(format t "Status code ~A~%" status-code)
(parse-xml-string (flexi-streams:octets-to-string body-or-stream :external-format (flexi-streams:make-external-format :utf-8)) ))))

;; google returns a malformed string every time - wallies!
;;(code-search "sucks" :language "pascal")

(defun code-search-hit-count (results)
(parse-integer (cadr (nth 5 results))))

(defun calculate-index-for-language (lang)
(format t "~&For Langauge : ~A~&" lang)
(let* ((control-index
(code-search-hit-count (code-search "okay" :language lang)))
(suckage-index
(/ (code-search-hit-count (code-search "sucks" :language lang))
control-index))
(rockage-index
(/ (code-search-hit-count (code-search "rocks" :language lang))
control-index)))
(format t "Suckage index ~D~&" suckage-index)
(format t "Rockage index ~D~&" rockage-index)
(format t "Controversy index ~F~&" (sqrt (+ (* rockage-index rockage-index) (* suckage-index suckage-index))))
;; ;; admittedly it's a bust if no one ever says that language Y sucks, but how probable is that ;-)
;; ;; but forth managed it...
(format t "Suckage/Rockage ratio ~D~&" (/ rockage-index suckage-index))
(list control-index suckage-index rockage-index
(sqrt (+ (* rockage-index rockage-index) (* suckage-index suckage-index)))
(/ rockage-index suckage-index))))


(defun compare-languages ()
(let* ((language-list '("c" "ruby" "perl" "pascal" "erlang" "javascript" "java" "smalltalk" "python" "lisp" "haskell" "ocaml"))
(language-results (mapcar #'calculate-index-for-language language-list))
(control-list (append (list "Frequency" "brown") (mapcar #'(lambda (x) (nth 0 x)) language-results)))
(suckage-list (append (list "Suckage" "red") (mapcar #'(lambda (x) (nth 1 x)) language-results)))
(rockage-list (append (list "Rockage" "green") (mapcar #'(lambda (x) (nth 2 x)) language-results)))
(controversy-list (append (list "Controversy" "blue") (mapcar #'(lambda (x) (nth 3 x)) language-results)))
(suckage/rockage-list (append (list "Rockage to Suckage ratio" "yellow") (mapcar #'(lambda (x) (nth 4 x)) language-results))))
(cl-gd:with-image* (640 480)
(fill-image 0 0 :color "white")
(plot-bar-chart (list suckage-list rockage-list controversy-list) :x-axis-labels language-list :bar-width .8 :vgrid t)
(cl-gd:write-image-to-file
(make-pathname :defaults clot-system:*base-directory* :name "languages" :type "png") :if-exists :supersede))
(cl-gd:with-image* (640 480)
(fill-image 0 0 :color "white")
(plot-bar-chart (list suckage/rockage-list) :x-axis-labels language-list :bar-width .8 :vgrid t)
(cl-gd:write-image-to-file
(make-pathname :defaults clot-system:*base-directory* :name "suckage-to-rockage" :type "png") :if-exists :supersede))))

Programming Language Comparison


First cut.

Tuesday, November 27

Devhelp Inform Designers Manual

Another devhelp file courtesy of pyhtmlhelp. This time it's the Inform Designers manual.. Yes, I'm writing interactive fiction, again..

Sunday, October 14

Change-class extensibility

I made an interesting minor discovery today: change-class is extensible in much the way
initialize-instance is...




CL-USER> (defclass test-class () ((a-slot :initarg :a-slot-value :initform 0)))
#
CL-USER> (defclass derived-class (test-class) ())
#
CL-USER> (defmethod update-instance-for-different-class :after ((old test-class) (new derived-class) &key fixup-information)
(format t "~A " fixup-information))
# DERIVED-CLASS) {A97F421}>
CL-USER> (make-instance 'test-class :a-slot-value 27)
#
CL-USER> (defparameter *test-instance* (make-instance 'test-class :a-slot-value 27))
*TEST-INSTANCE*
CL-USER> (change-class *test-instance* 'derived-class :fixup-information "Hello World")
Hello World
#
CL-USER>


I'm not sure I actually want to use this, but it's nice to know it's there..

Wednesday, August 29

Automating Visual Studio

Visual Studio is both a curse and a boon. A boon because it is a very good IDE for debugging. A curse because it's restricted to a single platform and tends to lock out third-party editors, such as Emacs, jEdit, SlickEdit, or whatever it is you use.


Most decent editors expect to be able to compile a file via a shell command, capture that commands output, and then scan the output for errors, enabling you to jump to the exact locaton. This can be via make, scons, and the regexp can be modified for different compilers.


However the 'Export Makefile' command dissapeared from Visual Studio with version six. The functionality to compile individual files from the command line has gone, leaving the non-Microsoft editor user with a dilemma. Whether to change their editing habits for the sake of a peaceful life with the GUI, or forsake the ability to compile individual files - whole projects can still be built via the DevEnv command.


However there is a nice Python hack that lets you get at the compiling functionality. You need to use the Python Win32 COM extensions to access Visual Stduio automation from Python. Micheal Graz created this script and tightly integrated it with Vim. I've taken out the vim-specific parts, and added only one Emacs specific part (in dte_get_file) to invoke Emacs when "getting" the current file from Visual Studio. The compilation output now goes to the command line rather than a vim quickfix buffer, so it should be possible to adapt this to your needs.



import os, sys, re, time, pywintypes, win32com.client

vsWindowKindTaskList = '{4A9B7E51-AA16-11D0-A8C5-00A0C921A4D2}'
vsWindowKindFindResults1 = '{0F887920-C2B6-11D2-9375-0080C747D9A0}'
vsWindowKindFindResults2 = '{0F887921-C2B6-11D2-9375-0080C747D9A0}'
vsWindowKindOutput = '{34E76E81-EE4A-11D0-AE2E-00A0C90FFFC3}'

vsBuildStateNotStarted = 1 # Build has not yet been started.
vsBuildStateInProgress = 2 # Build is currently in progress.
vsBuildStateDone = 3 # Build has been completed

#----------------------------------------------------------------------

def dte_compile_file ():
dte = _get_dte()
if not dte: return
try:
dte.ExecuteCommand ('Build.Compile')
except Exception, e:
_dte_exception (e)
return
# ExecuteCommand is not synchronous so we have to wait
while dte.Solution.SolutionBuild.BuildState == vsBuildStateInProgress:
time.sleep (0.1)
dte_output ('output')
_status_msg ('Compile file complete')

#----------------------------------------------------------------------

def dte_build_solution():
dte = _get_dte()
if not dte: return
if dte.CSharpProjects.Count:
dte.Documents.CloseAll()
_dte_raise ()
_dte_output_activate ()
try:
dte.Solution.SolutionBuild.Build (1)
# Build is not synchronous so we have to wait
while dte.Solution.SolutionBuild.BuildState != vsBuildStateDone:
time.sleep (0.25)
except Exception, e:
_dte_exception (e)
return
dte_output ('output')
_status_msg ('Build solution complete')


#----------------------------------------------------------------------

def dte_output (window_kind):
if window_kind == 'find_results_1':
window_name = 'Find Results 1'
window_id = vsWindowKindFindResults1
elif window_kind == 'find_results_2':
window_name = 'Find Results 2'
window_id = vsWindowKindFindResults2
elif window_kind == 'output':
window_name = 'Output'
window_id = vsWindowKindOutput
else:
_msg ('Error: unrecognized window (%s)' % window_kind)
return
dte = _get_dte()
if not dte:
print ">> Failed to get dte."
return
if window_id == vsWindowKindOutput:
owp = dte.Windows.Item(window_id).Object.OutputWindowPanes.Item('Build')
sel = owp.TextDocument.Selection
else:
sel = dte.Windows.Item(window_id).Selection
sel.SelectAll()
_status_msg ('VS %s' % window_name)
print sel.Text
sel.Collapse()


#----------------------------------------------------------------------

def dte_get_file ():
dte = _get_dte()
if not dte: return
doc = dte.ActiveDocument
if not doc:
_status_msg ('No VS file!')
return
pt = doc.Selection.ActivePoint
file = os.path.join (doc.Path, doc.Name)
os.system("emacsclientw -n +%d:%d %s " % (pt.Line, pt.DisplayColumn, file))

#----------------------------------------------------------------------

def dte_put_file (filename, line_num, col_num):
if not filename:
return
dte = _get_dte()
if not dte: return
io = dte.ItemOperations
rc = io.OpenFile (os.path.abspath (filename))
sel = dte.ActiveDocument.Selection
sel.MoveToLineAndOffset (line_num, col_num)
_dte_raise ()

#----------------------------------------------------------------------

def _get_dte ():
try:
return win32com.client.GetActiveObject ('VisualStudio.DTE')
except pywintypes.com_error:
_msg ('Cannot access VisualStudio. Not running?')
return None

#----------------------------------------------------------------------

_wsh = None
def _get_wsh ():
global _wsh
if not _wsh:
try:
_wsh = win32com.client.Dispatch ('WScript.Shell')
except pywintypes.com_error:
_msg ('Cannot access WScript.Shell')
return _wsh

#----------------------------------------------------------------------


#----------------------------------------------------------------------

def _dte_raise ():
dte = _get_dte()
if not dte: return
try:
dte.MainWindow.Activate ()
_get_wsh().AppActivate (dte.MainWindow.Caption)
except:
pass

#----------------------------------------------------------------------

def _dte_output_activate ():
dte = _get_dte()
if not dte: return
dte.Windows.Item(vsWindowKindOutput).Activate()

#----------------------------------------------------------------------

def _dte_set_autoload ():
dte = _get_dte()
if not dte: return
p = dte.Properties ('Environment', 'Documents')
p.Item('DetectFileChangesOutsideIDE').Value = 1
p.Item('AutoloadExternalChanges').Value = 1


#----------------------------------------------------------------------

def _dte_exception (e):
if isinstance (e, pywintypes.com_error):
try:
msg = e[2][2]
except:
msg = None
else:
msg = e
if not msg:
msg = 'Encountered unknown exception'
_status_msg ('ERROR %s' % msg)

#----------------------------------------------------------------------

def _status_msg (msg):
try:
caption = _get_dte().MainWindow.Caption.split()[0]
except:
caption = None
if caption:
msg = msg + ' (' + caption + ')'
_msg (msg)

#----------------------------------------------------------------------

def _msg (msg):
print ">> " + msg


#----------------------------------------------------------------------
# eg vsgo.py dte_compile_file
# vsgo.py dte_put_file GridToolPanelComponent.cpp 10 5
# vsgo.py dte_get_file
# vsgo.py dte_build_solution

def main ():
prog = os.path.basename(sys.argv[0])
if len(sys.argv) == 1:
print 'echo "ERROR: not enough args to %s"' % prog
return

fcn_name = sys.argv[1]
if not globals().has_key(fcn_name):
print 'echo "ERROR: no such fcn %s in %s"' % (fcn_name, prog)
return

fcn = globals()[fcn_name]
try:
apply(fcn, sys.argv[2:])

except TypeError, e:
print 'echo "ERROR in %s: %s"' % (prog, str(e))
return

if __name__ == '__main__': main()

Tuesday, June 12

Lisp Array Setter Syntax

Not the most inituituve in the world



(defmethod (setf setter-name) (value (self class-type) x y z)
(setf (row-major-aref (array-of self) (* x ... blah... ))))


(setf (setter-name self) x-index y-index z-index value)

The thing to remember is that the value always comes first.

Saturday, June 9

wxWidgets Documentation in Devhelp format

This post is what it says on the tin. I converted the wxWidgets help from htb to devhelp using this handy help converter. Here is the result. It needs to live somewhere where devhelp can find it: usually /usr/share/devhelp/books or ~/.devhelp/books, although the latter did not work for me


Why did I want devhelp and not HTB. Partly because devhelp integrates much more nicely with Gnome, but also because it made it trivial to get context - sensitive help out of Emacs with this little gem:




(defun devhelp-word-at-point ()
"runs devhelp"
(interactive)
(setq w (current-word))
(start-process-shell-command "devhelp" nil "devhelp" "-s" w))

Monday, June 4

Save Slime And Die

The best way to work with a Lisp is to leave it running all the time and hack on it bit by bit, building up your program bit by bit, doing mini-tests and off-the-cuff code as you go along and shaping it..


Except if you are like me, you might be working on a laptop with a limited battery life and have a strict time limit to your lisp hacking. It's bothered me that when working with SLIME the only way to save a core was to start a lisp in a terminal, load up your systems and your files, then dump and use that with C-u M-x slime, which lets you enter a command line to start your lisp.


It annoys me because if you are like me, your code doesn't necessarily capture the actual state of your core: it also contains half a dozen test variables and functions that you entered in the repl and are useful to have hang around. So I tried to find a way to dump and restore core from within slime. I came up with the following function



(defun save-slime-and-die (core-file-name)
;; close all
(mapcar #'(lambda (x) (swank::close-connection x)) swank::*connections*)
#+sb-thread
(dolist (thread (remove (swank::current-thread) (swank::all-threads)))
(swank::kill-thread thread))
(sleep 1)
(save-lisp-and-die core-file-name))

It's obviously for sbcl, and the gotcha is that it has to be executed in the *inferior-lisp* buffer, but it works..C-u M-x sbcl --core test.core brings back core dumped with (save-slime-and-die #P"test.core")

Thursday, May 3

CPP Evil

Possibly the most incomprehensible line of code I have ever written.


#define ALLOCATE_ENGINE_OBJECT(type) reinterpret_cast<Engine##type##Object*>(\
world.allocate<Engine##type##Object>()->init_object(\
type##Pool.allocate<Engine##type##Data>()))

Sunday, March 4

Unrealscript mode for Emacs

Edit: I've since abandoned this mode and moved to a simpler (but less buggy) version not based on cc-mode that lives here


;;; unrealscript-mode.el --- unrealscript mode derived from cc-mode

;; Author: 2007 John Connors
;; Maintainer: John Connors <johnc at yagc dot co dot uk>
;; Created: March 2007
;; Version: See cc-mode.el
;; Keywords: unrealscript cc-mode languages oop

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary:


;; Note: The interface used in this file requires CC Mode 5.30 or
;; later.

;;; Code:

(require 'cc-mode)

;; These are only required at compile time to get the sources for the
;; language constants. (The cc-fonts require and the font-lock
;; related constants could additionally be put inside an
;; (eval-after-load "font-lock" ...) but then some trickery is
;; necessary to get them compiled.)
(eval-when-compile
(require 'cc-langs)
(require 'cc-fonts))

(eval-and-compile
;; Make our mode known to the language constant system. Use Java
;; mode as the fallback for the constants we don't change here.
;; This needs to be done also at compile time since the language
;; constants are evaluated then.
(c-add-language 'unrealscript-mode 'java-mode))

;; unrealscript has no boolean but a string and a vector type.
(c-lang-defconst c-primitive-type-kwds
unrealscript
(append
'("bool" "name" "object" "actor" "string" "vector")
(delete "boolean"
;; Use append to not be destructive on the
;; return value below.
(append
;; Due to the fallback to Java, we need not give
;; a language to `c-lang-const'.
(c-lang-const c-primitive-type-kwds)
nil))))

(c-lang-defconst c-type-modifier-keywds
unrealscript
(append
'("config" "deprecated" "edfindable" "editconstarray"
"editinline" "export" "noexport" "globalconfig"
"localized" "const" "editconst" "input" "travel"
"skip" "export")
(c-lang-const c-type-modifier-keywds)
nil))


;; "Keywords introducing extra declaration specifiers in the region
;; between the header and the body \(i.e. the \"K&R-region\") in
;; declarations."

(c-lang-defconst c-postfix-decl-spec-kwds
unrealscript
(append
'("abstract" "native" "nativereplication" "nousercreate" "within"
"perobjectconfig" "transient" "noexport" "dependson" "exportstructs"
"cacheexempt" "hidedropdown" "parseconfig" "dontcollapsecategories"
"collapsecategories" "hidecategories" "showcategories" "placeable"
"notplaceable" "instanced")
(c-lang-const c-postfix-decl-spec-kwds)
nil))

;; "Keywords that may be followed by a comma separated list of type
;; identifiers, where each optionally can be prefixed by keywords. (Can
;; also be used for the special case when the list can contain only one
;; element.)"
(c-lang-defconst c-type-list-kwds
unrealscript
(cons "within"
(c-lang-const c-type-list-kwds)))

;; Function declarations begin with "function" in this language.
;; There's currently no special keyword list for that in CC Mode, but
;; treating it as a modifier works fairly well.
(c-lang-defconst c-modifier-kwds
unrealscript
(cons
"function"
(c-lang-const c-modifier-kwds)))


(c-lang-defconst c-block-decls-with-vars
unrealscript
(cons
"state"
(c-lang-const c-other-block-decl-kwds)))

;; "Keywords that may be followed by a parenthesis expression that doesn't
;; contain type identifiers."
(c-lang-defconst c-paren-nontype-kwds
unrealscript
(append
'("state" "var")
(c-lang-const c-paren-nontype-kwds)
nil))


;; "Keywords that may be followed by a parenthesis expression containing
;; type identifiers separated by arbitrary tokens."
(c-lang-defconst c-paren-type-kwds
unrealscript
(append
'("config" "dependson")
(c-lang-const c-paren-type-kwds)))

;; ;; No cpp in this language, but there's still a "#exec" directive to
;; ;; fontify. (The definitions for the extra keywords above are enough
;; ;; to incorporate them into the fontification regexps for types and
;; ;; keywords, so no additional font-lock patterns are required.)
;; (c-lang-defconst c-cpp-matchers
;; unrealscript
;; ;; Use the eval form for `font-lock-keywords' to be able to use
;; ;; the `c-preprocessor-face-name' variable that maps to a
;; ;; suitable face depending on the (X)Emacs version.
;; '(eval . (list "^\\s *\\(#exec\\)\\>\\(.*\\)"
;; (list 1 c-preprocessor-face-name)
;; '(2 font-lock-string-face))))

(defcustom unrealscript-font-lock-extra-types nil
"*List of extra types (aside from the type keywords) to recognize in Unrealscript mode.
Each list item should be a regexp matching a single identifier."
)

(defconst unrealscript-font-lock-keywords-1
(c-lang-const c-matchers-1 unrealscript)
"Minimal highlighting for UNREALSCRIPT mode.")

(defconst unrealscript-font-lock-keywords-2
(c-lang-const c-matchers-2 unrealscript)
"Fast normal highlighting for UNREALSCRIPT mode.")

(defconst unrealscript-font-lock-keywords-3
(c-lang-const c-matchers-3 unrealscript)
"Accurate normal highlighting for UNREALSCRIPT mode.")

(defvar unrealscript-font-lock-keywords unrealscript-font-lock-keywords-3
"Default expressions to highlight in UNREALSCRIPT mode.")

(defvar unrealscript-mode-syntax-table nil
"Syntax table used in unrealscript-mode buffers.")
(or unrealscript-mode-syntax-table
(setq unrealscript-mode-syntax-table
(funcall (c-lang-const c-make-mode-syntax-table unrealscript))))

(defvar unrealscript-mode-abbrev-table nil
"Abbreviation table used in unrealscript-mode buffers.")

(c-define-abbrev-table 'unrealscript-mode-abbrev-table
;; Keywords that if they occur first on a line might alter the
;; syntactic context, and which therefore should trig reindentation
;; when they are completed.
'(("else" "else" c-electric-continued-statement 0)
("while" "while" c-electric-continued-statement 0)))

(defvar unrealscript-mode-map (let ((map (c-make-inherited-keymap)))
;; Add bindings which are only useful for UNREALSCRIPT
map)
"Keymap used in unrealscript-mode buffers.")

(easy-menu-define unrealscript-menu unrealscript-mode-map "UNREALSCRIPT Mode Commands"
;; Can use `unrealscript' as the language for `c-mode-menu'
;; since its definition covers any language. In
;; this case the language is used to adapt to the
;; nonexistence of a cpp pass and thus removing some
;; irrelevant menu alternatives.
(cons "UNREALSCRIPT" (c-lang-const c-mode-menu unrealscript)))

;;;###Autoload
(add-to-list 'auto-mode-alist '("\\.uc\\'" . unrealscript-mode))

;;;###autoload
(defun unrealscript-mode ()
"Major mode for editing UNREALSCRIPT UnrealScript is a
Java-like object-orientated programming (OOP) language created by
Epic Games for programming in-game content for the UnrealEngine.

The hook `
c-mode-common-hook' is run with no args at mode
initialization, then `
unrealscript-mode-hook'.

Key bindings:
\\{unrealscript-mode-map}"

(interactive)
(kill-all-local-variables)
(c-initialize-cc-mode t)
(set-syntax-table unrealscript-mode-syntax-table)
(setq major-mode 'unrealscript-mode
mode-name "UnrealScript"
local-abbrev-table unrealscript-mode-abbrev-table
abbrev-mode t)
(use-local-map c-mode-map)
;; `c-init-language-vars' is a macro that is expanded at compile
;; time to a large `setq' with all the language variables and their
;; customized values for our language.
(c-init-language-vars unrealscript-mode)
;; `c-common-init' initializes most of the components of a CC Mode
;; buffer, including setup of the mode menu, font-lock, etc.
;; There's also a lower level routine `c-basic-common-init' that
;; only makes the necessary initialization to get the syntactic
;; analysis and similar things working.
(c-common-init 'unrealscript-mode)
(easy-menu-add unrealscript-menu)
(run-hooks 'c-mode-common-hook)
(run-hooks 'unrealscript-mode-hook)
(setq font-lock-keywords-case-fold-search t)
(c-update-modeline))


(provide 'unrealscript-mode)


Thursday, March 1

Isometric Projection Matrix

One thing that seems to get asked a lot is how to create an isometric style game using a 3d pipline and textured quads, instead of 2d sprite tiles. It is also a question that does not seem to get answered much, so I thought I would whip out a quick demonstration of how to do it with the Irrlicht Engine.


One thing to note is that this is not a textbook isometric projection which is a form of axonometric projection, but a fudge that makes the width and height of a cube in the viewport equal. This emulates tile based games nicely. Of course, with a "real" projection it might be possible to dynamically change the projection angle, which might be an interesting effect.




#include <irrlicht.h>

using namespace irr;

using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;



int main()
{


IrrlichtDevice *device =
createDevice( video::EDT_SOFTWARE2, dimension2d<s32>(640, 480), 16,
false, false, false, 0);

device->setWindowCaption(L"Isometric Projection");

IVideoDriver* driver = device->getVideoDriver();


while(device->run())
{
/*
Anything can be drawn between a beginScene() and an endScene()
call. The beginScene clears the screen with a color and also
the depth buffer if wanted. Then we let the Scene Manager and
the GUI Environment draw their content. With the endScene()
call everything is presented on the screen.
*/

driver->beginScene(true, true, SColor(255,100,101,140));

/**
* we are not interested in this transform so let us set it to
* identity
*/

driver->setTransform(video::ETS_WORLD, core::matrix4());
driver->setTransform(video::ETS_VIEW, core::matrix4());

/**
* first portion of transform - in matrix form
* x' = (x - z)
* y' = y + 0.5 * ( x + z )
* this maps the z to the x and y axes in such a way that
* the result appears isometric.
*/

matrix4 projMatrix;
projMatrix.makeIdentity();
projMatrix.M[0] = 1.0f;
projMatrix.M[8] = -1.0f;
projMatrix.M[1] = 0.5f;
projMatrix.M[5] = 1.0f;
projMatrix.M[9] = 0.5f;
projMatrix.M[10] = 0.0;

/**
* second portion of transform -- scale to fit clipping
* volume. If the scale is 1.0f then the unit vectors fit the
* clipping volume. The volume is a cuboid, centered in the origin.
* The scaling will determine the size of this volume which will
* contain the portion of the world that we can see.
*/

f32 scale = 4.0f;
matrix4 clipMatrix;
clipMatrix.buildProjectionMatrixOrthoLH(2 * scale, 2 * scale ,-1 * scale, 2 * scale);


/**
* concatentate transform - we multiply transforms together in
* the opposite order to that which we would apply them to a
* vector because of the law of associativity applies to
* matrices, but not commutivity and NM != MN fun,
* eh..matrices..gotta luv em..
*/

projMatrix = clipMatrix * projMatrix;

/**
* ok we now have our projection matrix
*/

driver->setTransform(video::ETS_PROJECTION, projMatrix);


/**
* draw unit x, y, and z vectors in our new space
*/


// x axis is red
driver->draw3DLine(vector3df(-1.0, 0.0, 0.0),
vector3df(1.0, 0.0, 0.0),
SColor(255,255,0,0));

// y axis is green
driver->draw3DLine(vector3df(0.0, -1.0, 0.0),
vector3df(0.0, 1.0, 0.0),
SColor(255,0,255,0));

// z axis is blue
driver->draw3DLine(vector3df(0.0, 0.0, -1.0),
vector3df(0.0, 0.0, 1.0),
SColor(255,0,0,255));

/**
* done
*/

driver->endScene();
}

device->drop();

return 0;
}

Sunday, December 31

New Year Coding Resolutions


  1. Finish cl-screen

  2. Finish and post my x86 assembler in Common Lisp to CommonLisp.net

  3. Write a new software renderer in Lisp

  4. Finally get the hang of writing setf expanders

  5. Write an animation testbed in Lisp

  6. At least make a start at writing a game again.

  7. Learn some Haskell

  8. Get more famililar with partial differential equations, the nabala operator and the jacobian matrix

Saturday, December 30

A Games/3d oriented lisp

Thoughts about the desirable properties of a Lisp optimised for fast 3d games use.



  1. Generational and/or incremental garbage collection.

  2. Incremental means gc collection can be time-bounded; generational will be more effective in culling short lived, small objects, and give us cache wins. Allocation should be trivial as possible.


  3. Native vector, matrix and quaternion types that map to SIMD

  4. De riguer for fast 3d operations: an inline assembler build into the language, coupled with macro expansion would probably mean that these not be coded


  5. Hashtables

  6. Too useful for lots of things


  7. Property lists

  8. Ditto: perfect for game AI


  9. Simple function call syntax

  10. CL's function call syntax is relatively complicated and makes optimisation harder.


  11. Fast single dimensional arrays

  12. A neccesity.


  13. Unhygenic macros

  14. A big system can be build from a relatively small one via CL-style macro-expansion..


  15. Readtable

  16. Ideal for rolling gustom syntax. CL's readtable has too many characters reserved. We need to keep ours free


  17. Optional compile-time type declarations

  18. Enables an optimiser to do a better job, and keeps more unboxed values arond


  19. Integrated shader compiler

  20. Shaders are just too useful not to have: an embedded lisp style shader with macroexpansion facilities would help a great deal.


  21. Sockets

  22. Needed for multiplayer games, and editors that run alongside the game


  23. Good FFI - to bind to c/c++ libraries

  24. A lot of exisiting code is in C - eg OpenGL


  25. Fast, streamable file I/O library

  26. Streaming in new data as the game runs is very important for large worlds.


  27. Heaps

  28. We will need to allocate hunks of memory for talking to 'C' libraries and just because we can? Not sure about this one


  29. Datatypes /library specifically for geometry - flexible mesh loading/compilation

  30. We will need acres of geometry, as usual..


  31. Datatypes / library specifically for texture and image processing

  32. And acres of texture maps, etc applied to them


  33. Datatypes / library for spatial structures: quadrees, bsp trees, octtrees, r-trees

  34. Good Scene management requires these


  35. Aggressive optimization: register colouring, scheduling, peephole..etc

  36. Goes without saying



That will do for now..;-)

Saturday, December 9

The birth of an assembler.

The story so far..It's all surprisingly easy in Lisp...


; SLIME 2006-10-28
CL-USER> (asdf:oos 'asdf:load-op 'cl-x86-asm)
; loading system definition from /home/johnc/.sbcl/systems/cl-x86-asm.asd
; into #
; registering # as CL-X86-ASM
; compiling file "/home/johnc/projects/msc/x86instructions.lisp" (written 09 DEC 2006 03:29:02 PM):
; compiling (IN-PACKAGE :CL-X86-ASM)
; compiling (DEFPARAMETER *INSTRUCTION-TABLE* ...)
; compiling (DEFPARAMETER *INSTRUCTION-LOOKUP-TABLE* ...)
; compiling (DEFUN MAKE-INSTRUCTION-HASH-TABLE ...)
; compiling (DEFUN LOOKUP-INSTRUCTION ...)

; /home/johnc/projects/msc/x86instructions.fasl written
; compilation finished in 0:00:00
; compiling file "/home/johnc/projects/msc/x86-assembler.lisp" (written 09 DEC 2006 03:28:00 PM):
; compiling (IN-PACKAGE :CL-X86-ASM)
; compiling (DEFPARAMETER *CURRENT-BITS-SIZE* ...)
; compiling (DEFUN SWITCH-BITS ...)
; compiling (DEFUN SYMBOL-IS-IN-PACKAGE ...)
; compiling (DEFUN IS-OPERAND-TYPE-P ...)
; compiling (DEFUN FIND-CORRECT-DESCRIPTION ...)
; compiling (DEFUN EXTRACT-ENCODING-FROM-DESCRIPTION ...)
; compiling (DEFUN PROCESS-ENCODING ...)

; file: /home/johnc/projects/msc/x86-assembler.lisp
; in: DEFUN PROCESS-ENCODING
; (DEFUN CL-X86-ASM::PROCESS-ENCODING
; (CL-X86-ASM::INSTRUCTION CL-X86-ASM::OPERANDS
; CL-X86-ASM::OPERAND-DESCRIPTION)
; CL-X86-ASM::OPERAND-DESCRIPTION)
; --> PROGN EVAL-WHEN SB-IMPL::%DEFUN SB-INT:NAMED-LAMBDA
; ==>
; #'(SB-INT:NAMED-LAMBDA CL-X86-ASM::PROCESS-ENCODING
; (CL-X86-ASM::INSTRUCTION CL-X86-ASM::OPERANDS
; CL-X86-ASM::OPERAND-DESCRIPTION)
; (BLOCK CL-X86-ASM::PROCESS-ENCODING
; CL-X86-ASM::OPERAND-DESCRIPTION))
;
; caught STYLE-WARNING:
; The variable INSTRUCTION is defined but never used.
;
; caught STYLE-WARNING:
; The variable OPERANDS is defined but never used.

; compiling (DEFUN ASSEMBLE-INSTRUCTION-OR-DIRECTIVE ...)
; compiling (DEFUN ASSEMBLE-FORM ...)
; compiling (DEFUN ASSEMBLE-FORMS ...)

; /home/johnc/projects/msc/x86-assembler.fasl written
; compilation finished in 0:00:00
WARNING:
COMPILE-FILE warned while performing # on
#.

; file: /home/johnc/projects/msc/x86-assembler.lisp
; in: DEFUN CL-X86-ASM::IS-OPERAND-TYPE-P
; (ASSOC CL-X86-ASM::OPERAND-TYPE CL-X86-ASM::*OPERAND-TYPE-CHECKERS*)
;
; caught WARNING:
; undefined variable: CL-X86-ASM::*OPERAND-TYPE-CHECKERS*

; in: DEFUN CL-X86-ASM::ASSEMBLE-FORM
; (FIRST LIST)
; ==>
; (CAR LIST)
;
; caught WARNING:
; undefined variable: LIST

;
; caught WARNING:
; These variables are undefined:
; CL-X86-ASM::*OPERAND-TYPE-CHECKERS* LIST
;
; compilation unit finished
; caught 3 WARNING conditions
; caught 2 STYLE-WARNING conditions
NIL
CL-USER> (cl-x86-asm::make-instruction-hash-table)
Adding :XORPS to table - ((xmm1 xmm2/m128) (15 87 /r))
Adding :XORPD to table - ((xmm1 xmm2/m128) (102 15 87 /r))
Adding :XOR to table - ((EAX imm32) (o32 53 id))
Adding :XOR to table - ((AX imm16) (o16 53 iw))
Adding :XOR to table - ((AL imm8) (52 ib))
Adding :XOR to table - ((r/m32 imm8) (o32 131 /6 ib))
Adding :XOR to table - ((r/m16 imm8) (o16 131 /6 ib))
Adding :XOR to table - ((r/m32 imm32) (o32 129 /6 id))
Adding :XOR to table - ((r/m16 imm16) (o16 129 /6 iw))
Adding :XOR to table - ((r/m8 imm8) (128 /6 ib))
Adding :XOR to table - ((reg32 r/m32) (o32 51 /r))
Adding :XOR to table - ((reg16 r/m16) (o16 51 /r))
Adding :XOR to table - ((reg8 r/m8) (50 /r))
Adding :XOR to table - ((r/m32 reg32) (o32 49 /r))
Adding :XOR to table - ((r/m16 reg16) (o16 49 /r))
Adding :XOR to table - ((r/m8 reg8) (48 /r))
Adding :XLATB to table - (NIL (215))
Adding :XLAT to table - (NIL (215))
Adding :XCHG to table - ((reg32 EAX) (o32 144 +r))
Adding :XCHG to table - ((reg16 AX) (o16 144 +r))
Adding :XCHG to table - ((EAX reg32) (o32 144 +r))
Adding :XCHG to table - ((AX reg16) (o16 144 +r))
Adding :XCHG to table - ((r/m32 reg32) (o32 135 /r))
Adding :XCHG to table - ((r/m16 reg16) (o16 135 /r))
Adding :XCHG to table - ((r/m8 reg8) (134 /r))
Adding :XCHG to table - ((reg32 r/m32) (o32 135 /r))
Adding :XCHG to table - ((reg16 r/m8) (o16 135 /r))
Adding :XCHG to table - ((reg8 r/m8) (134 /r))
Adding :XBTS to table - ((reg32 r/m32) (o32 15 166 /r))
Adding :XBTS to table - ((reg16 r/m16) (o16 15 166 /r))
Adding :XADD to table - ((r/m32 reg32) (o32 15 193 /r))
Adding :XADD to table - ((r/m16 reg16) (o16 15 193 /r))
Adding :XADD to table - ((r/m8 reg8) (15 192 /r))
Adding :WRSHR to table - ((r/m32) (15 55 /0))
Adding :WRMSR to table - (NIL (15 48))
Adding :WBINVD to table - (NIL (15 9))
Adding :FWAIT to table - (NIL (155))
Adding :WAIT to table - (NIL (155))
Adding :VERW to table - ((r/m16) (15 0 /5))
Adding :VERR to table - ((r/m16) (15 0 /4))
Adding :UNPCKLPS to table - ((xmm1 xmm2/m128) (15 20 /r))
Adding :UNPCKLPD to table - ((xmm1 xmm2/m128) (102 15 20 /r))
Adding :UNPCKHPS to table - ((xmm1 xmm2/m128) (15 21 /r))
Adding :UNPCKHPD to table - ((xmm1 xmm2/m128) (102 15 21 /r))
Adding :UMOV to table - ((reg32 r/m32) (o32 15 19 /r))
Adding :UMOV to table - ((reg16 r/m16) (o16 15 19 /r))
Adding :UMOV to table - ((reg8 r/m8) (15 18 /r))
Adding :UMOV to table - ((r/m32 reg32) (o32 15 17 /r))
Adding :UMOV to table - ((r/m16 reg16) (o16 15 17 /r))
Adding :UMOV to table - ((r/m8 reg8) (15 16 /r))
Adding :UD2 to table - (NIL (15 11))
Adding :UD1 to table - (NIL (15 185))
Adding :UD0 to table - (NIL (15 255))
Adding :UCOMISS to table - ((xmm1 xmm2/m128) (15 46 /r))
Adding :UCOMISD to table - ((xmm1 xmm2/m128) (102 15 46 /r))
Adding :TEST to table - ((EAX imm32) (o32 169 id))
Adding :TEST to table - ((AX imm16) (o16 169 iw))
Adding :TEST to table - ((AL imm8) (168 ib))
Adding :TEST to table - ((r/m32 imm32) (o32 247 /0 id))
Adding :TEST to table - ((r/m16 imm16) (o16 247 /0 iw))
Adding :TEST to table - ((r/m8 imm8) (246 /0 ib))
Adding :TEST to table - ((r/m32 reg32) (o32 133 /r))
Adding :TEST to table - ((r/m16 reg16) (o16 133 /r))
Adding :TEST to table - ((r/m8 reg8) (132 /r))
Adding :SYSRET to table - (NIL (15 7))
Adding :SYSEXIT to table - (NIL (15 53))
Adding :SYSENTER to table - (NIL (15 52))
Adding :SYSCALL to table - (NIL (15 5))
Adding :SVTS to table - ((m80) (15 124 /0))
Adding :SVLDT to table - ((m80) (15 122 /0))
Adding :SVDC to table - ((m80 segreg) (15 120 /r))
Adding :SUBSS to table - ((xmm1 xmm2/m128) (243 15 92 /r))
Adding :SUBSD to table - ((xmm1 xmm2/m128) (242 15 92 /r))
Adding :SUBPS to table - ((xmm1 xmm2/m128) (15 92 /r))
Adding :SUBPD to table - ((xmm1 xmm2/m128) (102 15 92 /r))
Adding :SUB to table - ((EAX imm32) (o32 45 id))
Adding :SUB to table - ((AX imm16) (o16 45 iw))
Adding :SUB to table - ((AL imm8) (44 ib))
Adding :SUB to table - ((r/m32 imm8) (o32 131 /5 ib))
Adding :SUB to table - ((r/m16 imm8) (o16 131 /5 ib))
Adding :SUB to table - ((r/m32 imm32) (o32 129 /5 id))
Adding :SUB to table - ((r/m16 imm16) (o16 129 /5 iw))
Adding :SUB to table - ((r/m8 imm8) (128 /5 ib))
Adding :SUB to table - ((reg32 r/m32) (o32 43 /r))
Adding :SUB to table - ((reg16 r/m16) (o16 43 /r))
Adding :SUB to table - ((reg8 r/m8) (42 /r))
Adding :SUB to table - ((r/m32 reg32) (o32 41 /r))
Adding :SUB to table - ((r/m16 reg16) (o16 41 /r))
Adding :SUB to table - ((r/m8 reg8) (40 /r))
Adding :STR to table - ((r/m16) (15 0 /1))
Adding :STOSD to table - (NIL (o32 171))
Adding :STOSW to table - (NIL (o16 171))
Adding :STOSB to table - (NIL (170))
Adding :STMXCSR to table - ((m32) (15 174 /3))
Adding :STI to table - (NIL (251))
Adding :STD to table - (NIL (253))
Adding :STC to table - (NIL (249))
Adding :SQRTSS to table - ((xmm1 xmm2/m128) (243 15 81 /r))
Adding :SQRTSD to table - ((xmm1 xmm2/m128) (242 15 81 /r))
Adding :SQRTPS to table - ((xmm1 xmm2/m128) (15 81 /r))
Adding :SQRTPD to table - ((xmm1 xmm2/m128) (102 15 81 /r))
Adding :SMSW to table - ((r/m16) (15 1 /4))
Adding :SMINTOLD to table - (NIL (15 126))
Adding :SMINT to table - (NIL (15 56))
Adding :SMI to table - (NIL (241))
Adding :SHUFPS to table - ((xmm1 xmm2/m128 imm8) (15 198 /r ib))
Adding :SHUFPD to table - ((xmm1 xmm2/m128 imm8) (102 15 198 /r ib))
Adding :SHRD to table - ((r/m32 reg32 CL) (o32 15 173 /r))
Adding :SHRD to table - ((r/m16 reg16 CL) (o16 15 173 /r))
Adding :SHRD to table - ((r/m32 reg32 imm8) (o32 15 172 /r ib))
Adding :SHRD to table - ((r/m16 reg16 imm8) (o16 15 172 /r ib))
Adding :SHLD to table - ((r/m16 reg32 CL) (o32 15 165 /r))
Adding :SHLD to table - ((r/m16 reg16 CL) (o16 15 165 /r))
Adding :SHLD to table - ((r/m16 reg32 imm8) (o32 15 164 /r ib))
Adding :SHLD to table - ((r/m16 reg16 imm8) (o16 15 164 /r ib))
Adding :SHR to table - ((r/m32 imm8) (o32 193 /5 ib))
Adding :SHR to table - ((r/m32 CL) (o32 211 /5))
Adding :SHR to table - ((r/m32 1) (o32 209 /5))
Adding :SHR to table - ((r/m16 imm8) (o16 193 /5 ib))
Adding :SHR to table - ((r/m16 CL) (o16 211 /5))
Adding :SHR to table - ((r/m16 1) (o16 209 /5))
Adding :SHR to table - ((r/m8 imm8) (192 /5 ib))
Adding :SHR to table - ((r/m8 CL) (210 /5))
Adding :SHR to table - ((r/m8 1) (208 /5))
Adding :SHL to table - ((r/m32 imm8) (o32 193 /4 ib))
Adding :SHL to table - ((r/m32 CL) (o32 211 /4))
Adding :SHL to table - ((r/m32 1) (o32 209 /4))
Adding :SHL to table - ((r/m16 imm8) (o16 193 /4 ib))
Adding :SHL to table - ((r/m16 CL) (o16 211 /4))
Adding :SHL to table - ((r/m16 1) (o16 209 /4))
Adding :SHL to table - ((r/m8 imm8) (192 /4 ib))
Adding :SHL to table - ((r/m8 CL) (210 /4))
Adding :SHL to table - ((r/m8 1) (208 /4))
Adding :SLDT to table - ((r/m16) (15 0 /0))
Adding :SIDT to table - ((mem) (15 1 /1))
Adding :SGDT to table - ((mem) (15 1 /0))
Adding :SFENCE to table - (NIL (15 174 /7))
Adding :SCASD to table - (NIL (o32 175))
Adding :SCASW to table - (NIL (o16 175))
Adding :SCASB to table - (NIL (174))
Adding :SBB to table - ((EAX imm32) (o32 29 id))
Adding :SBB to table - ((AX imm16) (o16 29 iw))
Adding :SBB to table - ((AL imm8) (28 ib))
Adding :SBB to table - ((r/m32 imm8) (o32 131 /3 ib))
Adding :SBB to table - ((r/m16 imm8) (o16 131 /3 ib))
Adding :SBB to table - ((r/m32 imm32) (o32 129 /3 id))
Adding :SBB to table - ((r/m16 imm16) (o16 129 /3 iw))
Adding :SBB to table - ((r/m8 imm8) (128 /3 ib))
Adding :SBB to table - ((reg32 r/m32) (o32 27 /r))
Adding :SBB to table - ((reg16 r/m16) (o16 27 /r))
Adding :SBB to table - ((reg8 r/m8) (26 /r))
Adding :SBB to table - ((r/m32 reg32) (o32 25 /r))
Adding :SBB to table - ((r/m16 reg16) (o16 25 /r))
Adding :SBB to table - ((r/m8 reg8) (24 /r))
Adding :SALC to table - (NIL (214))
Adding :SAR to table - ((r/m32 imm8) (o32 193 /7 ib))
Adding :SAR to table - ((r/m32 CL) (o32 211 /7))
Adding :SAR to table - ((r/m32 1) (o32 209 /7))
Adding :SAR to table - ((r/m16 imm8) (o16 193 /7 ib))
Adding :SAR to table - ((r/m16 CL) (o16 211 /7))
Adding :SAR to table - ((r/m16 1) (o16 209 /7))
Adding :SAR to table - ((r/m8 imm8) (192 /7 ib))
Adding :SAR to table - ((r/m8 CL) (210 /7))
Adding :SAR to table - ((r/m8 1) (208 /7))
Adding :SAL to table - ((r/m32 imm8) (o32 193 /4 ib))
Adding :SAL to table - ((r/m32 CL) (o32 211 /4))
Adding :SAL to table - ((r/m32 1) (o32 209 /4))
Adding :SAL to table - ((r/m16 imm8) (o16 193 /4 ib))
Adding :SAL to table - ((r/m16 CL) (o16 211 /4))
Adding :SAL to table - ((r/m16 1) (o16 209 /4))
Adding :SAL to table - ((r/m8 imm8) (192 /4 ib))
Adding :SAL to table - ((r/m8 CL) (210 /4))
Adding :SAL to table - ((r/m8 1) (208 /4))
Adding :SAHF to table - (NIL (158))
Adding :RSTS to table - ((m80) (15 125 /0))
Adding :RSQRTSS to table - ((xmm1 xmm2/m128) (243 15 82 /r))
Adding :RSQRTPS to table - ((xmm1 xmm2/m128) (15 82 /r))
Adding :RSM to table - (NIL (15 170))
Adding :RSLDT to table - ((m80) (15 123 /0))
Adding :RSDC to table - ((segreg m80) (15 121 /r))
Adding :ROR to table - ((r/m32 imm8) (o32 193 /1 ib))
Adding :ROR to table - ((r/m32 CL) (o32 211 /1))
Adding :ROR to table - ((r/m32 1) (o32 209 /1))
Adding :ROR to table - ((r/m16 imm8) (o16 193 /1 ib))
Adding :ROR to table - ((r/m16 CL) (o16 211 /1))
Adding :ROR to table - ((r/m16 1) (o16 209 /1))
Adding :ROR to table - ((r/m8 imm8) (192 /1 ib))
Adding :ROR to table - ((r/m8 CL) (210 /1))
Adding :ROR to table - ((r/m8 1) (208 /1))
Adding :ROL to table - ((r/m32 imm8) (o32 193 /0 ib))
Adding :ROL to table - ((r/m32 CL) (o32 211 /0))
Adding :ROL to table - ((r/m32 1) (o32 209 /0))
Adding :ROL to table - ((r/m16 imm8) (o16 193 /0 ib))
Adding :ROL to table - ((r/m16 CL) (o16 211 /0))
Adding :ROL to table - ((r/m16 1) (o16 209 /0))
Adding :ROL to table - ((r/m8 imm8) (192 /0 ib))
Adding :ROL to table - ((r/m8 CL) (210 /0))
Adding :ROL to table - ((r/m8 1) (208 /0))
Adding :RETN to table - ((imm16) (194 iw))
Adding :RETN to table - (NIL (195))
Adding :RETF to table - ((imm16) (202 iw))
Adding :RETF to table - (NIL (203))
Adding :RET to table - ((imm16) (194 iw))
Adding :RET to table - (NIL (195))
Adding :RDTSC to table - (NIL (15 49))
Adding :RDSHR to table - ((r/m32) (15 54 /0))
Adding :RDPMC to table - (NIL (15 51))
Adding :RDMSR to table - (NIL (15 50))
Adding :RCPSS to table - ((xmm1 xmm2/m128) (243 15 83 /r))
Adding :RCPPS to table - ((xmm1 xmm2/m128) (15 83 /r))
Adding :RCR to table - ((r/m32 imm8) (o32 193 /3 ib))
Adding :RCR to table - ((r/m32 CL) (o32 211 /3))
Adding :RCR to table - ((r/m32 1) (o32 209 /3))
Adding :RCR to table - ((r/m16 imm8) (o16 193 /3 ib))
Adding :RCR to table - ((r/m16 CL) (o16 211 /3))
Adding :RCR to table - ((r/m16 1) (o16 209 /3))
Adding :RCR to table - ((r/m8 imm8) (192 /3 ib))
Adding :RCR to table - ((r/m8 CL) (210 /3))
Adding :RCR to table - ((r/m8 1) (208 /3))
Adding :RCL to table - ((r/m32 imm8) (o32 193 /2 ib))
Adding :RCL to table - ((r/m32 CL) (o32 211 /2))
Adding :RCL to table - ((r/m32 1) (o32 209 /2))
Adding :RCL to table - ((r/m16 imm8) (o16 193 /2 ib))
Adding :RCL to table - ((r/m16 CL) (o16 211 /2))
Adding :RCL to table - ((r/m16 1) (o16 209 /2))
Adding :RCL to table - ((r/m8 imm8) (192 /2 ib))
Adding :RCL to table - ((r/m8 CL) (210 /2))
Adding :RCL to table - ((r/m8 1) (208 /2))
Adding :PXOR to table - ((xmm1 xmm2/m128) (102 15 239 /r))
Adding :PXOR to table - ((mm1 mm2/m64) (15 239 /r))
Adding :PUSHFW to table - (NIL (o16 156))
Adding :PUSHFD to table - (NIL (o32 156))
Adding :PUSHF to table - (NIL (156))
Adding :PUSHAW to table - (NIL (o16 96))
Adding :PUSHAD to table - (NIL (o32 96))
Adding :PUSHA to table - (NIL (96))
Adding :PUSH to table - ((imm32) (o32 104 id))
Adding :PUSH to table - ((imm16) (o16 104 iw))
Adding :PUSH to table - ((imm8) (106 ib))
Adding :PUSH to table - ((GS) (15 168))
Adding :PUSH to table - ((FS) (15 160))
Adding :PUSH to table - ((SS) (22))
Adding :PUSH to table - ((ES) (6))
Adding :PUSH to table - ((DS) (30))
Adding :PUSH to table - ((CS) (14))
Adding :PUSH to table - ((r/m32) (o32 255 /6))
Adding :PUSH to table - ((r/m16) (o16 255 /6))
Adding :PUSH to table - ((reg32) (o32 80 +r))
Adding :PUSH to table - ((reg16) (o16 80 +r))
Adding :PUNPCKLQDQ to table - ((xmm1 xmm2/m128) (102 15 108 /r))
Adding :PUNPCKLDQ to table - ((xmm1 xmm2/m128) (102 15 98 /r))
Adding :PUNPCKLWD to table - ((xmm1 xmm2/m128) (102 15 97 /r))
Adding :PUNPCKLBW to table - ((xmm1 xmm2/m128) (102 15 96 /r))
Adding :PUNPCKLDQ to table - ((mm1 mm2/m32) (15 98 /r))
Adding :PUNPCKLWD to table - ((mm1 mm2/m32) (15 97 /r))
Adding :PUNPCKLBW to table - ((mm1 mm2/m32) (15 96 /r))
Adding :PUNPCKHQDQ to table - ((xmm1 xmm2/m128) (102 15 109 /r))
Adding :PUNPCKHDQ to table - ((xmm1 xmm2/m128) (102 15 106 /r))
Adding :PUNPCKHWD to table - ((xmm1 xmm2/m128) (102 15 105 /r))
Adding :PUNPCKHBW to table - ((xmm1 xmm2/m128) (102 15 104 /r))
Adding :PUNPCKHDQ to table - ((mm1 mm2/m64) (15 106 /r))
Adding :PUNPCKHWD to table - ((mm1 mm2/m64) (15 105 /r))
Adding :PUNPCKHBW to table - ((mm1 mm2/m64) (15 104 /r))
Adding :PSWAPD to table - ((mm1 mm2/m64) (15 15 /r 187))
Adding :PSUBSIW to table - ((mm1 mm2/m64) (15 85 /r))
Adding :PSUBUSW to table - ((xmm1 xmm2/m128) (102 15 217 /r))
Adding :PSUBUSB to table - ((xmm1 xmm2/m128) (102 15 216 /r))
Adding :PSUBUSW to table - ((mm1 mm2/m64) (15 217 /r))
Adding :PSUBUSB to table - ((mm1 mm2/m64) (15 216 /r))
Adding :PSUBSW to table - ((xmm1 xmm2/m128) (102 15 233 /r))
Adding :PSUBSB to table - ((xmm1 xmm2/m128) (102 15 232 /r))
Adding :PSUBSW to table - ((mm1 mm2/m64) (15 233 /r))
Adding :PSUBSB to table - ((mm1 mm2/m64) (15 232 /r))
Adding :PSUBQ to table - ((xmm1 xmm2/m128) (102 15 251 /r))
Adding :PSUBD to table - ((xmm1 xmm2/m128) (102 15 250 /r))
Adding :PSUBW to table - ((xmm1 xmm2/m128) (102 15 249 /r))
Adding :PSUBB to table - ((xmm1 xmm2/m128) (102 15 248 /r))
Adding :PSUBQ to table - ((mm1 mm2/m64) (15 251 /r))
Adding :PSUBD to table - ((mm1 mm2/m64) (15 250 /r))
Adding :PSUBW to table - ((mm1 mm2/m64) (15 249 /r))
Adding :PSUBB to table - ((mm1 mm2/m64) (15 248 /r))
Adding :PSRLDQ to table - ((xmm1 imm8) (102 15 115 /3 ib))
Adding :PSRLQ to table - ((xmm imm8) (102 15 115 /2 ib))
Adding :PSRLQ to table - ((xmm1 xmm2/m128) (102 15 211 /r))
Adding :PSRLQ to table - ((mm imm8) (15 115 /2 ib))
Adding :PSRLQ to table - ((mm1 mm2/m64) (15 211 /r))
Adding :PSRLD to table - ((xmm imm8) (102 15 114 /2 ib))
Adding :PSRLD to table - ((xmm1 xmm2/m128) (102 15 210 /r))
Adding :PSRLD to table - ((mm imm8) (15 114 /2 ib))
Adding :PSRLD to table - ((mm1 mm2/m64) (15 210 /r))
Adding :PSRLW to table - ((xmm imm8) (102 15 113 /2 ib))
Adding :PSRLW to table - ((xmm1 xmm2/m128) (102 15 209 /r))
Adding :PSRLW to table - ((mm imm8) (15 113 /2 ib))
Adding :PSRLW to table - ((mm1 mm2/m64) (15 209 /r))
Adding :PSRAD to table - ((xmm imm8) (102 15 114 /4 ib))
Adding :PSRAD to table - ((xmm1 xmm2/m128) (102 15 226 /r))
Adding :PSRAD to table - ((mm imm8) (15 114 /4 ib))
Adding :PSRAD to table - ((mm1 mm2/m64) (15 226 /r))
Adding :PSRAW to table - ((xmm imm8) (102 15 113 /4 ib))
Adding :PSRAW to table - ((xmm1 xmm2/m128) (102 15 225 /r))
Adding :PSRAW to table - ((mm imm8) (15 113 /4 ib))
Adding :PSRAW to table - ((mm1 mm2/m64) (15 225 /r))
Adding :PSLLDQ to table - ((xmm1 imm8) (102 15 115 /7 ib))
Adding :PSLLQ to table - ((xmm imm8) (102 15 115 /6 ib))
Adding :PSLLQ to table - ((xmm1 xmm2/m128) (102 15 243 /r))
Adding :PSLLQ to table - ((mm imm8) (15 115 /6 ib))
Adding :PSLLQ to table - ((mm1 mm2/m64) (15 243 /r))
Adding :PSLLD to table - ((xmm imm8) (102 15 114 /6 ib))
Adding :PSLLD to table - ((xmm1 xmm2/m128) (102 15 242 /r))
Adding :PSLLD to table - ((mm imm8) (15 114 /6 ib))
Adding :PSLLD to table - ((mm1 mm2/m64) (15 242 /r))
Adding :PSLLW to table - ((xmm imm8) (102 15 113 /6 ib))
Adding :PSLLW to table - ((xmm1 xmm2/m128) (102 15 241 /r))
Adding :PSLLW to table - ((mm imm8) (15 113 /6 ib))
Adding :PSLLW to table - ((mm1 mm2/m64) (15 241 /r))
Adding :PSHUFW to table - ((mm1 mm2/m64 imm8) (15 112 /r ib))
Adding :PSHUFLW to table - ((xmm1 xmm2/m128 imm8) (242 15 112 /r ib))
Adding :PSHUFHW to table - ((xmm1 xmm2/m128 imm8) (243 15 112 /r ib))
Adding :PSHUFD to table - ((xmm1 xmm2/m128 imm8) (102 15 112 /r ib))
Adding :PSADBW to table - ((xmm1 xmm2/m128) (102 15 246 /r))
Adding :PSADBW to table - ((mm1 mm2/m64) (15 246 /r))
Adding :PREFETCHT2 to table - ((m8) (15 24 /3))
Adding :PREFETCHT1 to table - ((m8) (15 24 /2))
Adding :PREFETCHT0 to table - ((m8) (15 24 /1))
Adding :PREFETCHNTA to table - ((m8) (15 24 /0))
Adding :PREFETCHW to table - ((mem8) (15 13 /1))
Adding :PREFETCH to table - ((mem8) (15 13 /0))
Adding :POR to table - ((xmm1 xmm2/m128) (102 15 235 /r))
Adding :POR to table - ((mm1 mm2/m64) (15 235 /r))
Adding :POPFD to table - (NIL (o32 157))
Adding :POPFW to table - (NIL (o16 157))
Adding :POPF to table - (NIL (157))
Adding :POPAD to table - (NIL (o32 97))
Adding :POPAW to table - (NIL (o16 97))
Adding :POPA to table - (NIL (97))
Adding :POP to table - ((GS) (15 169))
Adding :POP to table - ((FS) (15 161))
Adding :POP to table - ((SS) (23))
Adding :POP to table - ((ES) (7))
Adding :POP to table - ((DS) (31))
Adding :POP to table - ((CS) (15))
Adding :POP to table - ((r/m32) (o32 143 /0))
Adding :POP to table - ((r/m16) (o16 143 /0))
Adding :POP to table - ((reg32) (o32 88 +r))
Adding :POP to table - ((reg16) (o16 88 +r))
Adding :PMVGEZB to table - ((mmxreg mem64) (15 92 /r))
Adding :PMVLZB to table - ((mmxreg mem64) (15 91 /r))
Adding :PMVNZB to table - ((mmxreg mem64) (15 90 /r))
Adding :PMVZB to table - ((mmxreg mem64) (15 88 /r))
Adding :PMULUDQ to table - ((xmm1 xmm2/m128) (102 15 244 /r))
Adding :PMULUDQ to table - ((mm1 mm2/m64) (15 244 /r))
Adding :PMULLW to table - ((xmm1 xmm2/m128) (102 15 213 /r))
Adding :PMULHW to table - ((xmm1 xmm2/m128) (102 15 229 /r))
Adding :PMULLW to table - ((mm1 mm2/m64) (15 213 /r))
Adding :PMULHW to table - ((mm1 mm2/m64) (15 229 /r))
Adding :PMULHUW to table - ((xmm1 xmm2/m128) (102 15 228 /r))
Adding :PMULHUW to table - ((mm1 mm2/m64) (15 228 /r))
Adding :PMULHRWA to table - ((mm1 mm2/m64) (15 15 /r 183))
Adding :PMULHRIW to table - ((mm1 mm2/m64) (15 93 /r))
Adding :PMULHRWC to table - ((mm1 mm2/m64) (15 89 /r))
Adding :PMOVMSKB to table - ((reg32 xmm) (102 15 215 /r))
Adding :PMOVMSKB to table - ((reg32 mm) (15 215 /r))
Adding :PMINUB to table - ((xmm1 xmm2/m128) (102 15 218 /r))
Adding :PMINUB to table - ((mm1 mm2/m64) (15 218 /r))
Adding :PMINSW to table - ((xmm1 xmm2/m128) (102 15 234 /r))
Adding :PMINSW to table - ((mm1 mm2/m64) (15 234 /r))
Adding :PMAXUB to table - ((xmm1 xmm2/m128) (102 15 222 /r))
Adding :PMAXUB to table - ((mm1 mm2/m64) (15 222 /r))
Adding :PMAXSW to table - ((xmm1 xmm2/m128) (102 15 238 /r))
Adding :PMAXSW to table - ((mm1 mm2/m64) (15 238 /r))
Adding :PMAGW to table - ((mm1 mm2/m64) (15 82 /r))
Adding :PMADDWD to table - ((xmm1 xmm2/m128) (102 15 245 /r))
Adding :PMADDWD to table - ((mm1 mm2/m64) (15 245 /r))
Adding :PMACHRIW to table - ((mm m64) (15 94 /r))
Adding :PINSRW to table - ((xmm r16/r32/m16 imm8) (102 15 196 /r ib))
Adding :PINSRW to table - ((mm r16/r32/m16 imm8) (15 196 /r ib))
Adding :PI2FW to table - ((mm1 mm2/m64) (15 15 /r 12))
Adding :PI2FD to table - ((mm1 mm2/m64) (15 15 /r 13))
Adding :PFSUBR to table - ((mm1 mm2/m64) (15 15 /r 170))
Adding :PFSUB to table - ((mm1 mm2/m64) (15 15 /r 154))
Adding :PFRSQRT to table - ((mm1 mm2/m64) (15 15 /r 151))
Adding :PFRSQIT1 to table - ((mm1 mm2/m64) (15 15 /r 167))
Adding :PFRCPIT2 to table - ((mm1 mm2/m64) (15 15 /r 182))
Adding :PFRCPIT1 to table - ((mm1 mm2/m64) (15 15 /r 166))
Adding :PFRCP to table - ((mm1 mm2/m64) (15 15 /r 150))
Adding :PFPNACC to table - ((mm1 mm2/m64) (15 15 /r 142))
Adding :PFNACC to table - ((mm1 mm2/m64) (15 15 /r 138))
Adding :PFMUL to table - ((mm1 mm2/m64) (15 15 /r 180))
Adding :PFMIN to table - ((mm1 mm2/m64) (15 15 /r 148))
Adding :PFMAX to table - ((mm1 mm2/m64) (15 15 /r 164))
Adding :PFCMPGT to table - ((mm1 mm2/m64) (15 15 /r 160))
Adding :PFCMPGE to table - ((mm1 mm2/m64) (15 15 /r 144))
Adding :PFCMPEQ to table - ((mm1 mm2/m64) (15 15 /r 176))
Adding :PFADD to table - ((mm1 mm2/m64) (15 15 /r 158))
Adding :PFACC to table - ((mm1 mm2/m64) (15 15 /r 174))
Adding :PF2IW to table - ((mm1 mm2/m64) (15 15 /r 28))
Adding :PF2ID to table - ((mm1 mm2/m64) (15 15 /r 29))
Adding :PEXTRW to table - ((reg32 xmm imm8) (102 15 197 /r ib))
Adding :PEXTRW to table - ((reg32 mm imm8) (15 197 /r ib))
Adding :PDISTIB to table - ((mm m64) (15 84 /r))
Adding :PCMPGTD to table - ((xmm1 xmm2/m128) (102 15 102 /r))
Adding :PCMPGTW to table - ((xmm1 xmm2/m128) (102 15 101 /r))
Adding :PCMPGTB to table - ((xmm1 xmm2/m128) (102 15 100 /r))
Adding :PCMPEQD to table - ((xmm1 xmm2/m128) (102 15 118 /r))
Adding :PCMPEQW to table - ((xmm1 xmm2/m128) (102 15 117 /r))
Adding :PCMPEQB to table - ((xmm1 xmm2/m128) (102 15 116 /r))
Adding :PCMPGTD to table - ((mm1 mm2/m64) (15 102 /r))
Adding :PCMPGTW to table - ((mm1 mm2/m64) (15 101 /r))
Adding :PCMPGTB to table - ((mm1 mm2/m64) (15 100 /r))
Adding :PCMPEQD to table - ((mm1 mm2/m64) (15 118 /r))
Adding :PCMPEQW to table - ((mm1 mm2/m64) (15 117 /r))
Adding :PCMPEQB to table - ((mm1 mm2/m64) (15 116 /r))
Adding :PAVGUSB to table - ((mm1 mm2/m64) (15 15 /r 191))
Adding :PAVGW to table - ((xmm1 xmm2/m128) (102 15 227 /r))
Adding :PAVGB to table - ((xmm1 xmm2/m128) (102 15 224 /r))
Adding :PAVGW to table - ((mm1 mm2/m64) (15 227 /r))
Adding :PAVGB to table - ((mm1 mm2/m64) (15 224 /r))
Adding :PAVEB to table - ((mmxreg r/m64) (15 80 /r))
Adding :PAUSE to table - (NIL (243 144))
Adding :PANDN to table - ((xmm1 xmm2/m128) (102 15 223 /r))
Adding :PAND to table - ((xmm1 xmm2/m128) (102 15 219 /r))
Adding :PANDN to table - ((mm1 mm2/m64) (15 223 /r))
Adding :PAND to table - ((mm1 mm2/m64) (15 219 /r))
Adding :PADDUSW to table - ((xmm1 xmm2/m128) (102 15 221 /r))
Adding :PADDUSB to table - ((xmm1 xmm2/m128) (102 15 220 /r))
Adding :PADDUSW to table - ((mm1 mm2/m64) (15 221 /r))
Adding :PADDUSB to table - ((mm1 mm2/m64) (15 220 /r))
Adding :PADDSIW to table - ((mmxreg r/m64) (15 81 /r))
Adding :PADDSW to table - ((xmm1 xmm2/m128) (102 15 237 /r))
Adding :PADDSB to table - ((xmm1 xmm2/m128) (102 15 236 /r))
Adding :PADDSW to table - ((mm1 mm2/m64) (15 237 /r))
Adding :PADDSB to table - ((mm1 mm2/m64) (15 236 /r))
Adding :PADDQ to table - ((xmm1 xmm2/m128) (102 15 212 /r))
Adding :PADDQ to table - ((mm1 mm2/m64) (15 212 /r))
Adding :PADDD to table - ((xmm1 xmm2/m128) (102 15 254 /r))
Adding :PADDW to table - ((xmm1 xmm2/m128) (102 15 253 /r))
Adding :PADDB to table - ((xmm1 xmm2/m128) (102 15 252 /r))
Adding :PADDD to table - ((mm1 mm2/m64) (15 254 /r))
Adding :PADDW to table - ((mm1 mm2/m64) (15 253 /r))
Adding :PADDB to table - ((mm1 mm2/m64) (15 252 /r))
Adding :PACKUSWB to table - ((xmm1 xmm2/m128) (102 15 103 /r))
Adding :PACKSSWB to table - ((xmm1 xmm2/m128) (102 15 99 /r))
Adding :PACKSSDW to table - ((xmm1 xmm2/m128) (102 15 107 /r))
Adding :PACKUSWB to table - ((mm1 mm2/m64) (15 103 /r))
Adding :PACKSSWB to table - ((mm1 mm2/m64) (15 99 /r))
Adding :PACKSSDW to table - ((mm1 mm2/m64) (15 107 /r))
Adding :OUTSD to table - (NIL (o32 111))
Adding :OUTSW to table - (NIL (o16 111))
Adding :OUTSB to table - (NIL (110))
Adding :OUT to table - ((DX EAX) (o32 239))
Adding :OUT to table - ((DX AX) (o16 239))
Adding :OUT to table - ((DX AL) (238))
Adding :OUT to table - ((imm8 EAX) (o32 231 ib))
Adding :OUT to table - ((imm8 AX) (o16 231 ib))
Adding :OUT to table - ((imm8 AL) (230 ib))
Adding :ORPS to table - ((xmm1 xmm2/m128) (15 86 /r))
Adding :ORPD to table - ((xmm1 xmm2/m128) (102 15 86 /r))
Adding :OR to table - ((EAX imm32) (o32 13 id))
Adding :OR to table - ((AX imm16) (o16 13 iw))
Adding :OR to table - ((AL imm8) (12 ib))
Adding :OR to table - ((r/m32 imm8) (o32 131 /1 ib))
Adding :OR to table - ((r/m16 imm8) (o16 131 /1 ib))
Adding :OR to table - ((r/m32 imm32) (o32 129 /1 id))
Adding :OR to table - ((r/m16 imm16) (o16 129 /1 iw))
Adding :OR to table - ((r/m8 imm8) (128 /1 ib))
Adding :OR to table - ((reg32 r/m32) (o32 11 /r))
Adding :OR to table - ((reg16 r/m16) (o16 11 /r))
Adding :OR to table - ((reg8 r/m8) (10 /r))
Adding :OR to table - ((r/m32 reg32) (o32 9 /r))
Adding :OR to table - ((r/m16 reg16) (o16 9 /r))
Adding :OR to table - ((r/m8 reg8) (8 /r))
Adding :NOP to table - (NIL (144))
Adding :NOT to table - ((r/m32) (o32 247 /2))
Adding :NOT to table - ((r/m16) (o16 247 /2))
Adding :NOT to table - ((r/m8) (246 /2))
Adding :NEG to table - ((r/m32) (o32 247 /3))
Adding :NEG to table - ((r/m16) (o16 247 /3))
Adding :NEG to table - ((r/m8) (246 /3))
Adding :MULSS to table - ((xmm1 xmm2/mem32) (243 15 89 /r))
Adding :MULSD to table - ((xmm1 xmm2/mem32) (242 15 89 /r))
Adding :MULPS to table - ((xmm1 xmm2/mem128) (15 89 /r))
Adding :MULPD to table - ((xmm1 xmm2/mem128) (102 15 89 /r))
Adding :MUL to table - ((r/m32) (o32 247 /4))
Adding :MUL to table - ((r/m16) (o16 247 /4))
Adding :MUL to table - ((r/m8) (246 /4))
Adding :MOVUPS to table - ((xmm1/mem128 xmm2) (15 17 /r))
Adding :MOVUPS to table - ((xmm1 xmm2/mem128) (15 16 /r))
Adding :MOVUPD to table - ((xmm1/mem128 xmm2) (102 15 17 /r))
Adding :MOVUPD to table - ((xmm1 xmm2/mem128) (102 15 16 /r))
Adding :MOVZX to table - ((reg32 r/m16) (o32 15 183 /r))
Adding :MOVZX to table - ((reg32 r/m8) (o32 15 182 /r))
Adding :MOVZX to table - ((reg16 r/m8) (o16 15 182 /r))
Adding :MOVSX to table - ((reg32 r/m16) (o32 15 191 /r))
Adding :MOVSX to table - ((reg32 r/m8) (o32 15 190 /r))
Adding :MOVSX to table - ((reg16 r/m8) (o16 15 190 /r))
Adding :MOVSS to table - ((xmm1/m32 xmm2) (243 15 17 /r))
Adding :MOVSS to table - ((xmm1 xmm2/m32) (243 15 16 /r))
Adding :MOVSD to table - ((xmm1/m64 xmm2) (242 15 17 /r))
Adding :MOVSD to table - ((xmm1 xmm2/m64) (242 15 16 /r))
Adding :MOVSD to table - (NIL (o32 165))
Adding :MOVSW to table - (NIL (o16 165))
Adding :MOVSB to table - (NIL (164))
Adding :MOVQ2DQ to table - ((xmm mm) (243 OF 214 /r))
Adding :MOVQ to table - ((xmm1/m64 xmm2) (102 15 214 /r))
Adding :MOVQ to table - ((xmm1 xmm2/m64) (243 15 126 /r))
Adding :MOVQ to table - ((mm1/m64 mm2) (15 127 /r))
Adding :MOVQ to table - ((mm1 mm2/m64) (15 111 /r))
Adding :MOVNTQ to table - ((m64 mm) (15 231 /r))
Adding :MOVNTPS to table - ((m128 xmm) (15 43 /r))
Adding :MOVNTPD to table - ((m128 xmm) (102 15 43 /r))
Adding :MOVNTI to table - ((m32 reg32) (15 195 /r))
Adding :MOVNTDQ to table - ((m128 xmm) (102 15 231 /r))
Adding :MOVMSKPS to table - ((reg32 xmm) (15 80 /r))
Adding :MOVMSKPD to table - ((reg32 xmm) (102 15 80 /r))
Adding :MOVLPS to table - ((m64 xmm) (OF 19 /r))
Adding :MOVLPS to table - ((xmm m64) (OF 18 /r))
Adding :MOVLPD to table - ((m64 xmm) (102 OF 19 /r))
Adding :MOVLPD to table - ((xmm m64) (102 OF 18 /r))
Adding :MOVLHPS to table - ((xmm1 xmm2) (OF 22 /r))
Adding :MOVHPS to table - ((m64 xmm) (15 23 /r))
Adding :MOVHPS to table - ((xmm m64) (15 22 /r))
Adding :MOVHPD to table - ((m64 xmm) (102 OF 23 /r))
Adding :MOVHPD to table - ((xmm m64) (102 OF 22 /r))
Adding :MOVHLPS to table - ((xmm1 xmm2) (OF 18 /r))
Adding :MOVDQU to table - ((xmm1/m128 xmm2) (243 OF 127 /r))
Adding :MOVDQU to table - ((xmm1 xmm2/m128) (243 OF 111 /r))
Adding :MOVDQA to table - ((xmm1/m128 xmm2) (102 OF 127 /r))
Adding :MOVDQA to table - ((xmm1 xmm2/m128) (102 OF 111 /r))
Adding :MOVDQ2Q to table - ((mm xmm) (242 OF 214 /r))
Adding :MOVD to table - ((r/m32 xmm) (102 15 126 /r))
Adding :MOVD to table - ((xmm r/m32) (102 15 110 /r))
Adding :MOVD to table - ((r/m32 mm) (15 126 /r))
Adding :MOVD to table - ((mm r/m32) (15 110 /r))
Adding :MOVAPS to table - ((xmm1/mem128 xmm2) (15 41 /r))
Adding :MOVAPS to table - ((xmm1 xmm2/mem128) (15 40 /r))
Adding :MOVAPD to table - ((xmm1/mem128 xmm2) (102 15 41 /r))
Adding :MOVAPD to table - ((xmm1 xmm2/mem128) (102 15 40 /r))
Adding :MOV to table - ((TR3/4/5/6/7 reg32) (15 38 /r))
Adding :MOV to table - ((DR0/1/2/3/6/7 reg32) (15 35 /r))
Adding :MOV to table - ((CR0/2/3/4 reg32) (15 34 /r))
Adding :MOV to table - ((reg32 TR3/4/5/6/7) (15 36 /r))
Adding :MOV to table - ((reg32 DR0/1/2/3/6/7) (15 33 /r))
Adding :MOV to table - ((reg32 CR0/2/3/4) (15 32 /r))
Adding :MOV to table - ((segreg r/m32) (o32 142 /r))
Adding :MOV to table - ((segreg r/m16) (o16 142 /r))
Adding :MOV to table - ((r/m32 segreg) (o32 140 /r))
Adding :MOV to table - ((r/m16 segreg) (o16 140 /r))
Adding :MOV to table - ((memoffs32 EAX) (o32 163 ow/od))
Adding :MOV to table - ((memoffs16 AX) (o16 163 ow/od))
Adding :MOV to table - ((memoffs8 AL) (162 ow/od))
Adding :MOV to table - ((EAX memoffs32) (o32 161 ow/od))
Adding :MOV to table - ((AX memoffs16) (o16 161 ow/od))
Adding :MOV to table - ((AL memoffs8) (160 ow/od))
Adding :MOV to table - ((r/m32 imm32) (o32 199 /0 id))
Adding :MOV to table - ((r/m16 imm16) (o16 199 /0 iw))
Adding :MOV to table - ((r/m8 imm8) (198 /0 ib))
Adding :MOV to table - ((reg32 imm32) (o32 184 +r id))
Adding :MOV to table - ((reg16 imm16) (o16 184 +r iw))
Adding :MOV to table - ((reg8 imm8) (176 +r ib))
Adding :MOV to table - ((reg32 r/m32) (o32 139 /r))
Adding :MOV to table - ((reg16 r/m16) (o16 139 /r))
Adding :MOV to table - ((reg8 r/m8) (138 /r))
Adding :MOV to table - ((r/m32 reg32) (o32 137 /r))
Adding :MOV to table - ((r/m16 reg16) (o16 137 /r))
Adding :MOV to table - ((r/m8 reg8) (136 /r))
Adding :MINSS to table - ((xmm1 xmm2/m32) (243 15 93 /r))
Adding :MINSD to table - ((xmm1 xmm2/m64) (242 15 93 /r))
Adding :MINPS to table - ((xmm1 xmm2/m128) (15 93 /r))
Adding :MINPD to table - ((xmm1 xmm2/m128) (102 15 93 /r))
Adding :MFENCE to table - (NIL (15 174 /6))
Adding :MAXSS to table - ((xmm1 xmm2/m32) (243 15 95 /r))
Adding :MAXSD to table - ((xmm1 xmm2/m64) (242 15 95 /r))
Adding :MAXPS to table - ((xmm1 xmm2/m128) (15 95 /r))
Adding :MAXPD to table - ((xmm1 xmm2/m128) (102 15 95 /r))
Adding :MASKMOVQ to table - ((mm1 mm2) (15 247 /r))
Adding :MASKMOVDQU to table - ((xmm1 xmm2) (102 15 247 /r))
Adding :LTR to table - ((r/m16) (15 0 /3))
Adding :LSL to table - ((reg32 r/m32) (o32 15 3 /r))
Adding :LSL to table - ((reg16 r/m16) (o16 15 3 /r))
Adding :LOOPNZ to table - ((imm ECX) (2610 224 rb))
Adding :LOOPNZ to table - ((imm CX) (2582 224 rb))
Adding :LOOPNZ to table - ((imm) (224 rb))
Adding :LOOPNE to table - ((imm ECX) (2610 224 rb))
Adding :LOOPNE to table - ((imm CX) (2582 224 rb))
Adding :LOOPNE to table - ((imm) (224 rb))
Adding :LOOPZ to table - ((imm ECX) (2610 225 rb))
Adding :LOOPZ to table - ((imm CX) (2582 225 rb))
Adding :LOOPZ to table - ((imm) (225 rb))
Adding :LOOPE to table - ((imm ECX) (2610 225 rb))
Adding :LOOPE to table - ((imm CX) (2582 225 rb))
Adding :LOOPE to table - ((imm) (225 rb))
Adding :LOOP to table - ((imm ECX) (2610 226 rb))
Adding :LOOP to table - ((imm CX) (2582 226 rb))
Adding :LOOP to table - ((imm) (226 rb))
Adding :LODSD to table - (NIL (o32 173))
Adding :LODSW to table - (NIL (o16 173))
Adding :LODSB to table - (NIL (172))
Adding :LOADALL286 to table - (NIL (15 5))
Adding :LOADALL to table - (NIL (15 7))
Adding :LMSW to table - ((r/m16) (15 1 /6))
Adding :LLDT to table - ((r/m16) (15 0 /2))
Adding :LIDT to table - ((mem) (15 1 /3))
Adding :LGDT to table - ((mem) (15 1 /2))
Adding :LFENCE to table - (NIL (15 174 /5))
Adding :LEAVE to table - (NIL (201))
Adding :LEA to table - ((reg32 mem) (o32 141 /r))
Adding :LEA to table - ((reg16 mem) (o16 141 /r))
Adding :LSS to table - ((reg32 mem) (o32 15 178 /r))
Adding :LSS to table - ((reg16 mem) (o16 15 178 /r))
Adding :LGS to table - ((reg32 mem) (o32 15 181 /r))
Adding :LGS to table - ((reg16 mem) (o16 15 181 /r))
Adding :LFS to table - ((reg32 mem) (o32 15 180 /r))
Adding :LFS to table - ((reg16 mem) (o16 15 180 /r))
Adding :LES to table - ((reg32 mem) (o32 196 /r))
Adding :LES to table - ((reg16 mem) (o16 196 /r))
Adding :LDS to table - ((reg32 mem) (o32 197 /r))
Adding :LDS to table - ((reg16 mem) (o16 197 /r))
Adding :LDMXCSR to table - ((mem32) (15 174 /2))
Adding :LAR to table - ((reg32 r/m32) (o32 15 2 /r))
Adding :LAR to table - ((reg16 r/m16) (o16 15 2 /r))
Adding :LAHF to table - (NIL (159))
Adding :JMP to table - ((r/m32) (o32 255 /4))
Adding :JMP to table - ((r/m16) (o16 255 /4))
Adding :JMP to table - ((mem32) (o32 255 /5))
Adding :JMP to table - ((mem) (o16 255 /5))
Adding :JMP to table - ((imm:imm32) (o32 234 id iw))
Adding :JMP to table - ((imm:imm16) (o16 234 iw iw))
Adding :JMP to table - ((imm) (235 rb))
Adding :JMP to table - ((imm) (233 rw/rd))
Adding :JECXZ to table - ((imm) (2610 227 rb))
Adding :JCXZ to table - ((imm) (2582 227 rb))
Adding :IRETD to table - (NIL (o32 207))
Adding :IRETW to table - (NIL (o16 207))
Adding :IRET to table - (NIL (207))
Adding :INVLPG to table - ((mem) (15 1 /7))
Adding :INVD to table - (NIL (15 8))
Adding :INTO to table - (NIL (206))
Adding :INT03 to table - (NIL (204))
Adding :INT3 to table - (NIL (204))
Adding :INT01 to table - (NIL (241))
Adding :ICEBP to table - (NIL (241))
Adding :INT1 to table - (NIL (241))
Adding :INT to table - ((imm8) (205 ib))
Adding :INSD to table - (NIL (o32 109))
Adding :INSW to table - (NIL (o16 109))
Adding :INSB to table - (NIL (108))
Adding :INC to table - ((r/m32) (o32 255 /0))
Adding :INC to table - ((r/m16) (o16 255 /0))
Adding :INC to table - ((r/m8) (254 /0))
Adding :INC to table - ((reg32) (o32 64 +r))
Adding :INC to table - ((reg16) (o16 64 +r))
Adding :IN to table - ((EAX DX) (o32 237))
Adding :IN to table - ((AX DX) (o16 237))
Adding :IN to table - ((AL DX) (236))
Adding :IN to table - ((EAX imm8) (o32 229 ib))
Adding :IN to table - ((AX imm8) (o16 229 ib))
Adding :IN to table - ((AL imm8) (228 ib))
Adding :IMUL to table - ((reg32 r/m32 imm32) (o32 105 /r id))
Adding :IMUL to table - ((reg32 r/m32 imm8) (o32 107 /r ib))
Adding :IMUL to table - ((reg16 r/m16 imm16) (o16 105 /r iw))
Adding :IMUL to table - ((reg16 r/m16 imm8) (o16 107 /r ib))
Adding :IMUL to table - ((reg32 imm32) (o32 105 /r id))
Adding :IMUL to table - ((reg32 imm8) (o32 107 /r ib))
Adding :IMUL to table - ((reg16 imm16) (o16 105 /r iw))
Adding :IMUL to table - ((reg16 imm8) (o16 107 /r ib))
Adding :IMUL to table - ((reg32 r/m32) (o32 15 175 /r))
Adding :IMUL to table - ((reg16 r/m16) (o16 15 175 /r))
Adding :IMUL to table - ((r/m32) (o32 247 /5))
Adding :IMUL to table - ((r/m16) (o16 247 /5))
Adding :IMUL to table - ((r/m8) (246 /5))
Adding :IDIV to table - ((r/m32) (o32 247 /7))
Adding :IDIV to table - ((r/m16) (o16 247 /7))
Adding :IDIV to table - ((r/m8) (246 /7))
Adding :IBTS to table - ((r/m32 reg32) (o32 15 167 /r))
Adding :IBTS to table - ((r/m16 reg16) (o16 15 167 /r))
Adding :HLT to table - (NIL (244))
Adding :FYL2XP1 to table - (NIL (217 249))
Adding :FYL2X to table - (NIL (217 241))
Adding :FXTRACT to table - (NIL (217 244))
Adding :FXSAVE to table - ((memory) (15 174 /0))
Adding :FXRSTOR to table - ((memory) (15 174 /1))
Adding :FXCH to table - ((ST0 fpureg) (217 200 +r))
Adding :FXCH to table - ((fpureg ST0) (217 200 +r))
Adding :FXCH to table - ((fpureg) (217 200 +r))
Adding :FXCH to table - (NIL (217 201))
Adding :FXAM to table - (NIL (217 229))
Adding :FUCOMIP to table - ((ST0 fpureg) (223 232 +r))
Adding :FUCOMIP to table - ((fpureg) (223 232 +r))
Adding :FUCOMI to table - ((ST0 fpureg) (219 232 +r))
Adding :FUCOMI to table - ((fpureg) (219 232 +r))
Adding :FUCOMPP to table - (NIL (218 233))
Adding :FUCOMP to table - ((ST0 fpureg) (221 232 +r))
Adding :FUCOMP to table - ((fpureg) (221 232 +r))
Adding :FUCOM to table - ((ST0 fpureg) (221 224 +r))
Adding :FUCOM to table - ((fpureg) (221 224 +r))
Adding :FTST to table - (NIL (217 228))
Adding :FSUBRP to table - ((fpureg ST0) (222 224 +r))
Adding :FSUBRP to table - ((fpureg) (222 224 +r))
Adding :FSUBP to table - ((fpureg ST0) (222 232 +r))
Adding :FSUBP to table - ((fpureg) (222 232 +r))
Adding :FSUBR to table - ((fpureg ST0) (220 224 +r))
Adding :FSUBR to table - ((fpureg) (220 224 +r))
Adding :FSUBR to table - ((ST0 fpureg) (216 232 +r))
Adding :FSUBR to table - ((fpureg) (216 232 +r))
Adding :FSUBR to table - ((mem64) (220 /5))
Adding :FSUBR to table - ((mem32) (216 /5))
Adding :FSUB to table - ((fpureg ST0) (220 232 +r))
Adding :FSUB to table - ((fpureg) (220 232 +r))
Adding :FSUB to table - ((ST0 fpureg) (216 224 +r))
Adding :FSUB to table - ((fpureg) (216 224 +r))
Adding :FSUB to table - ((mem64) (220 /4))
Adding :FSUB to table - ((mem32) (216 /4))
Adding :FNSTSW to table - ((AX) (223 224))
Adding :FNSTSW to table - ((mem16) (221 /7))
Adding :FSTSW to table - ((AX) (155 223 224))
Adding :FSTSW to table - ((mem16) (155 221 /7))
Adding :FNSTENV to table - ((mem) (217 /6))
Adding :FSTENV to table - ((mem) (155 217 /6))
Adding :FNSTCW to table - ((mem16) (217 /7))
Adding :FSTCW to table - ((mem16) (155 217 /7))
Adding :FSTP to table - ((fpureg) (221 216 +r))
Adding :FSTP to table - ((mem80) (219 /7))
Adding :FSTP to table - ((mem64) (221 /3))
Adding :FSTP to table - ((mem32) (217 /3))
Adding :FST to table - ((fpureg) (221 208 +r))
Adding :FST to table - ((mem64) (221 /2))
Adding :FST to table - ((mem32) (217 /2))
Adding :FSQRT to table - (NIL (217 250))
Adding :FSINCOS to table - (NIL (217 251))
Adding :FSIN to table - (NIL (217 254))
Adding :FSETPM to table - (NIL (219 228))
Adding :FSCALE to table - (NIL (217 253))
Adding :FRSTOR to table - ((mem) (221 /4))
Adding :FNSAVE to table - ((mem) (221 /6))
Adding :FSAVE to table - ((mem) (155 221 /6))
Adding :FRNDINT to table - (NIL (217 252))
Adding :FPREM1 to table - (NIL (217 245))
Adding :FPREM to table - (NIL (217 248))
Adding :FPTAN to table - (NIL (217 242))
Adding :FPATAN to table - (NIL (217 243))
Adding :FNOP to table - (NIL (217 208))
Adding :FMULP to table - ((fpureg ST0) (222 200 +r))
Adding :FMULP to table - ((fpureg) (222 200 +r))
Adding :FMUL to table - ((fpureg ST0) (220 200 +r))
Adding :FMUL to table - ((fpureg) (220 200 +r))
Adding :FMUL to table - ((ST0 fpureg) (216 200 +r))
Adding :FMUL to table - ((fpureg) (216 200 +r))
Adding :FMUL to table - ((mem64) (220 /1))
Adding :FMUL to table - ((mem32) (216 /1))
Adding :FLDENV to table - ((mem) (217 /4))
Adding :FLDCW to table - ((mem16) (217 /5))
Adding :FLDZ to table - (NIL (217 238))
Adding :FLDPI to table - (NIL (217 235))
Adding :FLDLN2 to table - (NIL (217 237))
Adding :FLDLG2 to table - (NIL (217 236))
Adding :FLDL2T to table - (NIL (217 233))
Adding :FLDL2E to table - (NIL (217 234))
Adding :FLD1 to table - (NIL (217 232))
Adding :FLD to table - ((fpureg) (217 192 +r))
Adding :FLD to table - ((mem80) (219 /5))
Adding :FLD to table - ((mem64) (221 /0))
Adding :FLD to table - ((mem32) (217 /0))
Adding :FISUBR to table - ((mem32) (218 /5))
Adding :FISUBR to table - ((mem16) (222 /5))
Adding :FISUB to table - ((mem32) (218 /4))
Adding :FISUB to table - ((mem16) (222 /4))
Adding :FNINIT to table - (NIL (219 227))
Adding :FINIT to table - (NIL (155 219 227))
Adding :FINCSTP to table - (NIL (217 247))
Adding :FIMUL to table - ((mem32) (218 /1))
Adding :FIMUL to table - ((mem16) (222 /1))
Adding :FISTP to table - ((mem64) (223 /7))
Adding :FISTP to table - ((mem32) (219 /3))
Adding :FISTP to table - ((mem16) (223 /3))
Adding :FIST to table - ((mem32) (219 /2))
Adding :FIST to table - ((mem16) (223 /2))
Adding :FILD to table - ((mem64) (223 /5))
Adding :FILD to table - ((mem32) (219 /0))
Adding :FILD to table - ((mem16) (223 /0))
Adding :FIDIVR to table - ((mem32) (218 /7))
Adding :FIDIVR to table - ((mem16) (222 /7))
Adding :FIDIV to table - ((mem32) (218 /6))
Adding :FIDIV to table - ((mem16) (222 /6))
Adding :FICOMP to table - ((mem32) (218 /3))
Adding :FICOMP to table - ((mem16) (222 /3))
Adding :FICOM to table - ((mem32) (218 /2))
Adding :FICOM to table - ((mem16) (222 /2))
Adding :FIADD to table - ((mem32) (218 /0))
Adding :FIADD to table - ((mem16) (222 /0))
Adding :FFREEP to table - ((fpureg) (223 192 +r))
Adding :FFREE to table - ((fpureg) (221 192 +r))
Adding :FEMMS to table - (NIL (15 14))
Adding :FDIVRP to table - ((fpureg ST0) (222 240 +r))
Adding :FDIVRP to table - ((fpureg) (222 240 +r))
Adding :FDIVP to table - ((fpureg ST0) (222 248 +r))
Adding :FDIVP to table - ((fpureg) (222 248 +r))
Adding :FDIVR to table - ((fpureg ST0) (220 240 +r))
Adding :FDIVR to table - ((fpureg) (220 240 +r))
Adding :FDIVR to table - ((ST0 fpureg) (216 248 +r))
Adding :FDIVR to table - ((fpureg) (216 248 +r))
Adding :FDIVR to table - ((mem64) (220 /0))
Adding :FDIVR to table - ((mem32) (216 /0))
Adding :FDIV to table - ((fpureg ST0) (220 248 +r))
Adding :FDIV to table - ((fpureg) (220 248 +r))
Adding :FDIV to table - ((ST0 fpureg) (216 240 +r))
Adding :FDIV to table - ((fpureg) (216 240 +r))
Adding :FDIV to table - ((mem64) (220 /6))
Adding :FDIV to table - ((mem32) (216 /6))
Adding :FNENI to table - (NIL (219 224))
Adding :FENI to table - (NIL (155 219 224))
Adding :FNDISI to table - (NIL (219 225))
Adding :FDISI to table - (NIL (155 219 225))
Adding :FDECSTP to table - (NIL (217 246))
Adding :FCOS to table - (NIL (217 255))
Adding :FCOMIP to table - ((ST0 fpureg) (223 240 +r))
Adding :FCOMIP to table - ((fpureg) (223 240 +r))
Adding :FCOMI to table - ((ST0 fpureg) (219 240 +r))
Adding :FCOMI to table - ((fpureg) (219 240 +r))
Adding :FCOMPP to table - (NIL (222 217))
Adding :FCOMP to table - ((ST0 fpureg) (216 216 +r))
Adding :FCOMP to table - ((fpureg) (216 216 +r))
Adding :FCOMP to table - ((mem64) (220 /3))
Adding :FCOMP to table - ((mem32) (216 /3))
Adding :FCOM to table - ((ST0 fpureg) (216 208 +r))
Adding :FCOM to table - ((fpureg) (216 208 +r))
Adding :FCOM to table - ((mem64) (220 /2))
Adding :FCOM to table - ((mem32) (216 /2))
Adding :FCMOVNU to table - ((ST0 fpureg) (219 216 +r))
Adding :FCMOVNU to table - ((fpureg) (219 216 +r))
Adding :FCMOVNBE to table - ((ST0 fpureg) (219 208 +r))
Adding :FCMOVNBE to table - ((fpureg) (219 208 +r))
Adding :FCMOVNE to table - ((ST0 fpureg) (219 200 +r))
Adding :FCMOVNE to table - ((fpureg) (219 200 +r))
Adding :FCMOVNB to table - ((ST0 fpureg) (219 192 +r))
Adding :FCMOVNB to table - ((fpureg) (219 192 +r))
Adding :FCMOVU to table - ((ST0 fpureg) (218 216 +r))
Adding :FCMOVU to table - ((fpureg) (218 216 +r))
Adding :FCMOVBE to table - ((ST0 fpureg) (218 208 +r))
Adding :FCMOVBE to table - ((fpureg) (218 208 +r))
Adding :FCMOVE to table - ((ST0 fpureg) (218 200 +r))
Adding :FCMOVE to table - ((fpureg) (218 200 +r))
Adding :FCMOVB to table - ((ST0 fpureg) (218 192 +r))
Adding :FCMOVB to table - ((fpureg) (218 192 +r))
Adding :FNCLEX to table - (NIL (219 226))
Adding :FCLEX to table - (NIL (155 219 226))
Adding :FCHS to table - (NIL (217 224))
Adding :FBSTP to table - ((mem80) (223 /6))
Adding :FBLD to table - ((mem80) (223 /4))
Adding :FADDP to table - ((fpureg ST0) (222 192 +r))
Adding :FADDP to table - ((fpureg) (222 192 +r))
Adding :FADD to table - ((fpureg ST0) (220 192 +r))
Adding :FADD to table - ((fpureg) (220 192 +r))
Adding :FADD to table - ((ST0 fpureg) (216 192 +r))
Adding :FADD to table - ((fpureg) (216 192 +r))
Adding :FADD to table - ((mem64) (220 /0))
Adding :FADD to table - ((mem32) (216 /0))
Adding :FABS to table - (NIL (217 225))
Adding :F2XM1 to table - (NIL (217 240))
Adding :ENTER to table - ((imm imm) (200 iw ib))
Adding :EMMS to table - (NIL (15 119))
Adding :DIVSS to table - ((xmm1 xmm2/mem32) (243 15 94 /r))
Adding :DIVSD to table - ((xmm1 xmm2/mem64) (242 15 94 /r))
Adding :DIVPS to table - ((xmm1 xmm2/mem128) (15 94 /r))
Adding :DIVPD to table - ((xmm1 xmm2/mem128) (102 15 94 /r))
Adding :DIV to table - ((r/m32) (o32 247 /6))
Adding :DIV to table - ((r/m16) (o16 247 /6))
Adding :DIV to table - ((r/m8) (246 /6))
Adding :DEC to table - ((r/m32) (o32 255 /1))
Adding :DEC to table - ((r/m16) (o16 255 /1))
Adding :DEC to table - ((r/m8) (254 /1))
Adding :DEC to table - ((reg32) (o32 72 +r))
Adding :DEC to table - ((reg16) (o16 72 +r))
Adding :DAS to table - (NIL (47))
Adding :DAA to table - (NIL (39))
Adding :CVTTSD2SI to table - ((reg32 xmm/mem32) (243 15 44 /r))
Adding :CVTTSD2SI to table - ((reg32 xmm/mem64) (242 15 44 /r))
Adding :CVTTPS2PI to table - ((mm xmm/mem64) (15 44 /r))
Adding :CVTTPS2DQ to table - ((xmm1 xmm2/mem128) (243 15 91 /r))
Adding :CVTTPD2PI to table - ((mm xmm/mem128) (102 15 44 /r))
Adding :CVTTPD2DQ to table - ((xmm1 xmm2/mem128) (102 15 230 /r))
Adding :CVTSS2SI to table - ((reg32 xmm/mem32) (243 15 45 /r))
Adding :CVTSS2SD to table - ((xmm1 xmm2/mem32) (243 15 90 /r))
Adding :CVTSI2SS to table - ((xmm r/m32) (243 15 42 /r))
Adding :CVTSI2SD to table - ((xmm r/m32) (242 15 42 /r))
Adding :CVTSD2SS to table - ((xmm1 xmm2/mem64) (242 15 90 /r))
Adding :CVTSD2SI to table - ((reg32 xmm/mem64) (242 15 45 /r))
Adding :CVTPS2PI to table - ((mm xmm/mem64) (15 45 /r))
Adding :CVTPS2PD to table - ((xmm1 xmm2/mem64) (15 90 /r))
Adding :CVTPS2DQ to table - ((xmm1 xmm2/mem128) (102 15 91 /r))
Adding :CVTPI2PS to table - ((xmm mm/mem64) (15 42 /r))
Adding :CVTPI2PD to table - ((xmm mm/mem64) (102 15 42 /r))
Adding :CVTPD2PS to table - ((xmm1 xmm2/mem128) (102 15 90 /r))
Adding :CVTPD2PI to table - ((mm xmm/mem128) (102 15 45 /r))
Adding :CVTPD2DQ to table - ((xmm1 xmm2/mem128) (242 15 230 /r))
Adding :CVTDQ2PS to table - ((xmm1 xmm2/mem128) (15 91 /r))
Adding :CVTDQ2PD to table - ((xmm1 xmm2/mem64) (243 15 230 /r))
Adding :CPUID to table - (NIL (15 162))
Adding :COMISS to table - ((xmm1 xmm2/mem32) (102 15 47 /r))
Adding :COMISD to table - ((xmm1 xmm2/mem64) (102 15 47 /r))
Adding :CMPXCHG8B to table - ((mem) (15 199 /1))
Adding :CMPXCHG486 to table - ((r/m32 reg32) (o32 15 167 /r))
Adding :CMPXCHG486 to table - ((r/m16 reg16) (o16 15 167 /r))
Adding :CMPXCHG486 to table - ((r/m8 reg8) (15 166 /r))
Adding :CMPXCHG to table - ((r/m32 reg32) (o32 15 177 /r))
Adding :CMPXCHG to table - ((r/m16 reg16) (o16 15 177 /r))
Adding :CMPXCHG to table - ((r/m8 reg8) (15 176 /r))
Adding :CMPORDSS to table - ((xmm1 xmm2/mem32) (243 15 194 /r 7))
Adding :CMPNLESS to table - ((xmm1 xmm2/mem32) (243 15 194 /r 6))
Adding :CMPNLTSS to table - ((xmm1 xmm2/mem32) (243 15 194 /r 5))
Adding :CMPNEQSS to table - ((xmm1 xmm2/mem32) (243 15 194 /r 4))
Adding :CMPUNORDSS to table - ((xmm1 xmm2/mem32) (243 15 194 /r 3))
Adding :CMPLESS to table - ((xmm1 xmm2/mem32) (243 15 194 /r 2))
Adding :CMPLTSS to table - ((xmm1 xmm2/mem32) (243 15 194 /r 1))
Adding :CMPEQSS to table - ((xmm1 xmm2/mem32) (243 15 194 /r 0))
Adding :CMPSS to table - ((xmm1 xmm2/mem32 imm8) (243 15 194 /r ib))
Adding :CMPORDSD to table - ((xmm1 xmm2/mem64) (242 15 194 /r 7))
Adding :CMPNLESD to table - ((xmm1 xmm2/mem64) (242 15 194 /r 6))
Adding :CMPNLTSD to table - ((xmm1 xmm2/mem64) (242 15 194 /r 5))
Adding :CMPNEQSD to table - ((xmm1 xmm2/mem64) (242 15 194 /r 4))
Adding :CMPUNORDSD to table - ((xmm1 xmm2/mem64) (242 15 194 /r 3))
Adding :CMPLESD to table - ((xmm1 xmm2/mem64) (242 15 194 /r 2))
Adding :CMPLTSD to table - ((xmm1 xmm2/mem64) (242 15 194 /r 1))
Adding :CMPEQSD to table - ((xmm1 xmm2/mem64) (242 15 194 /r 0))
Adding :CMPSD to table - ((xmm1 xmm2/mem64 imm8) (242 15 194 /r ib))
Adding :CMPSD to table - (NIL (o32 167))
Adding :CMPSW to table - (NIL (o16 167))
Adding :CMPSB to table - (NIL (166))
Adding :CMPORDPS to table - ((xmm1 xmm2/mem128) (15 194 /r 7))
Adding :CMPNLEPS to table - ((xmm1 xmm2/mem128) (15 194 /r 6))
Adding :CMPNLTPS to table - ((xmm1 xmm2/mem128) (15 194 /r 5))
Adding :CMPNEQPS to table - ((xmm1 xmm2/mem128) (15 194 /r 4))
Adding :CMPUNORDPS to table - ((xmm1 xmm2/mem128) (15 194 /r 3))
Adding :CMPLEPS to table - ((xmm1 xmm2/mem128) (15 194 /r 2))
Adding :CMPLTPS to table - ((xmm1 xmm2/mem128) (15 194 /r 1))
Adding :CMPEQPS to table - ((xmm1 xmm2/mem128) (15 194 /r 0))
Adding :CMPPS to table - ((xmm1 xmm2/mem128 imm8) (15 194 /r ib))
Adding :CMPORDPD to table - ((xmm1 xmm2/mem128) (102 15 194 /r 7))
Adding :CMPNLEPD to table - ((xmm1 xmm2/mem128) (102 15 194 /r 6))
Adding :CMPNLTPD to table - ((xmm1 xmm2/mem128) (102 15 194 /r 5))
Adding :CMPNEQPD to table - ((xmm1 xmm2/mem128) (102 15 194 /r 4))
Adding :CMPUNORDPD to table - ((xmm1 xmm2/mem128) (102 15 194 /r 3))
Adding :CMPLEPD to table - ((xmm1 xmm2/mem128) (102 15 194 /r 2))
Adding :CMPLTPD to table - ((xmm1 xmm2/mem128) (102 15 194 /r 1))
Adding :CMPEQPD to table - ((xmm1 xmm2/mem128) (102 15 194 /r 0))
Adding :CMPPD to table - ((xmm1 xmm2/mem128 imm8) (102 15 194 /r ib))
Adding :CMP to table - ((EAX imm32) (o32 61 id))
Adding :CMP to table - ((AX imm16) (o16 61 iw))
Adding :CMP to table - ((AL imm8) (60 ib))
Adding :CMP to table - ((r/m32 imm8) (o32 131 /0 ib))
Adding :CMP to table - ((r/m16 imm8) (o16 131 /0 ib))
Adding :CMP to table - ((r/m32 imm32) (o32 129 /0 id))
Adding :CMP to table - ((r/m16 imm16) (o16 129 /0 iw))
Adding :CMP to table - ((r/m8 imm8) (128 /0 ib))
Adding :CMP to table - ((reg32 r/m32) (o32 59 /r))
Adding :CMP to table - ((reg16 r/m16) (o16 59 /r))
Adding :CMP to table - ((reg8 r/m8) (58 /r))
Adding :CMP to table - ((r/m32 reg32) (o32 57 /r))
Adding :CMP to table - ((r/m16 reg16) (o16 57 /r))
Adding :CMP to table - ((r/m8 reg8) (56 /r))
Adding :CMC to table - (NIL (245))
Adding :CLFLUSH to table - ((mem) (15 174 /7))
Adding :CLTS to table - (NIL (15 6))
Adding :CLI to table - (NIL (250))
Adding :CLD to table - (NIL (252))
Adding :CLC to table - (NIL (248))
Adding :CDQ to table - (NIL (o32 153))
Adding :CWD to table - (NIL (o16 153))
Adding :CWDE to table - (NIL (o32 152))
Adding :CBW to table - (NIL (o16 152))
Adding :CALL to table - ((r/m32) (o32 255 /2))
Adding :CALL to table - ((r/m16) (o16 255 /2))
Adding :CALL to table - ((mem32) (o32 255 /3))
Adding :CALL to table - ((mem16) (o16 255 /3))
Adding :CALL to table - ((imm:imm32) (o32 154 id iw))
Adding :CALL to table - ((imm:imm16) (o16 154 iw iw))
Adding :CALL to table - ((imm) (232 rw/rd))
Adding :BTS to table - ((r/m32 imm) (o32 15 186 /5 ib))
Adding :BTS to table - ((r/m16 imm) (o16 15 186 /5 ib))
Adding :BTS to table - ((r/m32 reg32) (o32 15 171 /r))
Adding :BTS to table - ((r/m16 reg16) (o16 15 171 /r))
Adding :BTR to table - ((r/m32 imm8) (o32 15 186 /6 ib))
Adding :BTR to table - ((r/m16 imm8) (o16 15 186 /6 ib))
Adding :BTR to table - ((r/m32 reg32) (o32 15 179 /r))
Adding :BTR to table - ((r/m16 reg16) (o16 15 179 /r))
Adding :BTC to table - ((r/m32 imm8) (o32 15 186 /7 ib))
Adding :BTC to table - ((r/m16 imm8) (o16 15 186 /7 ib))
Adding :BTC to table - ((r/m32 reg32) (o32 15 187 /r))
Adding :BTC to table - ((r/m16 reg16) (o16 15 187 /r))
Adding :BT to table - ((r/m32 imm8) (o32 15 186 /4 ib))
Adding :BT to table - ((r/m16 imm8) (o16 15 186 /4 ib))
Adding :BT to table - ((r/m32 reg32) (o32 15 163 /r))
Adding :BT to table - ((r/m16 reg16) (o16 15 163 /r))
Adding :BSWAP to table - ((reg32) (o32 15 200 +r))
Adding :BSR to table - ((reg32 r/m32) (o32 15 189 /r))
Adding :BSR to table - ((reg16 r/m16) (o16 15 189 /r))
Adding :BSF to table - ((reg32 r/m32) (o32 15 188 /r))
Adding :BSF to table - ((reg16 r/m16) (o16 15 188 /r))
Adding :BOUND to table - ((reg32 mem) (o32 98 /r))
Adding :BOUND to table - ((reg16 mem) (o16 98 /r))
Adding :ARPL to table - ((r/m16 reg16) (99 /r))
Adding :ANDPS to table - ((xmm1 xmm2/mem128) (15 84 /r))
Adding :ANDPD to table - ((xmm1 xmm2/mem128) (102 15 84 /r))
Adding :ANDNPS to table - ((xmm1 xmm2/mem128) (15 85 /r))
Adding :ANDNPD to table - ((xmm1 xmm2/mem128) (102 15 85 /r))
Adding :AND to table - ((EAX imm32) (o32 37 id))
Adding :AND to table - ((AX imm16) (o16 37 iw))
Adding :AND to table - ((AL imm8) (36 ib))
Adding :AND to table - ((r/m32 imm8) (o32 131 /4 ib))
Adding :AND to table - ((r/m16 imm8) (o16 131 /4 ib))
Adding :AND to table - ((r/m32 imm32) (o32 129 /4 id))
Adding :AND to table - ((r/m16 imm16) (o16 129 /4 iw))
Adding :AND to table - ((r/m8 imm8) (128 /4 ib))
Adding :AND to table - ((reg32 r/m32) (o32 35 /r))
Adding :AND to table - ((reg16 r/m16) (o16 35 /r))
Adding :AND to table - ((reg8 r/m8) (34 /r))
Adding :AND to table - ((r/m32 reg32) (o32 33 /r))
Adding :AND to table - ((r/m16 reg16) (o16 33 /r))
Adding :AND to table - ((r/m8 reg8) (32 /r))
Adding :ADDSS to table - ((xmm1 xmm2/mem32) (243 15 88 /r))
Adding :ADDSD to table - ((xmm1 xmm2/mem64) (242 15 88 /r))
Adding :ADDPS to table - ((xmm1 xmm2/mem128) (15 88 /r))
Adding :ADDPD to table - ((xmm1 xmm2/mem128) (102 15 88 /r))
Adding :ADD to table - ((EAX imm32) (o32 5 id))
Adding :ADD to table - ((AX imm16) (o16 5 iw))
Adding :ADD to table - ((AL imm8) (4 ib))
Adding :ADD to table - ((r/m32 imm8) (o32 131 /0 ib))
Adding :ADD to table - ((r/m16 imm8) (o16 131 /0 ib))
Adding :ADD to table - ((r/m32 imm32) (o32 129 /0 id))
Adding :ADD to table - ((r/m16 imm16) (o16 129 /0 iw))
Adding :ADD to table - ((r/m8 imm8) (128 /0 ib))
Adding :ADD to table - ((reg32 r/m32) (o32 3 /r))
Adding :ADD to table - ((reg16 r/m16) (o16 3 /r))
Adding :ADD to table - ((reg8 r/m8) (2 /r))
Adding :ADD to table - ((r/m32 reg32) (o32 1 /r))
Adding :ADD to table - ((r/m16 reg16) (o16 1 /r))
Adding :ADD to table - ((r/m8 reg8) (0 /r))
Adding :ADC to table - ((EAX imm32) (o32 21 id))
Adding :ADC to table - ((AX imm16) (o16 21 iw))
Adding :ADC to table - ((AL imm8) (20 ib))
Adding :ADC to table - ((r/m32 imm8) (o32 131 /2 ib))
Adding :ADC to table - ((r/m16 imm8) (o16 131 /2 ib))
Adding :ADC to table - ((r/m32 imm32) (o32 129 /2 id))
Adding :ADC to table - ((r/m16 imm16) (o16 129 /2 iw))
Adding :ADC to table - ((r/m8 imm8) (128 /2 ib))
Adding :ADC to table - ((reg32 r/m32) (o32 19 /r))
Adding :ADC to table - ((reg16 r/m16) (o16 19 /r))
Adding :ADC to table - ((reg8 r/m8) (18 /r))
Adding :ADC to table - ((r/m32 reg32) (o32 17 /r))
Adding :ADC to table - ((r/m16 reg16) (o16 17 /r))
Adding :ADC to table - ((r/m8 reg8) (16 /r))
Adding :AAM to table - ((imm) (212 ib))
Adding :AAM to table - (NIL (212 10))
Adding :AAD to table - ((imm) (213 ib))
Adding :AAD to table - (NIL (213 10))
Adding :AAS to table - (NIL (63))
Adding :AAA to table - (NIL (55))
Adding :|J0 NEAR| to table - ((imm) (15 128 rw/rd))
Adding :|JNO NEAR| to table - ((imm) (15 129 rw/rd))
Adding :|JB NEAR| to table - ((imm) (15 130 rw/rd))
Adding :|JC NEAR| to table - ((imm) (15 130 rw/rd))
Adding :|JNAE NEAR| to table - ((imm) (15 130 rw/rd))
Adding :|JAE NEAR| to table - ((imm) (15 131 rw/rd))
Adding :|JNB NEAR| to table - ((imm) (15 131 rw/rd))
Adding :|JNC NEAR| to table - ((imm) (15 131 rw/rd))
Adding :|JE NEAR| to table - ((imm) (15 132 rw/rd))
Adding :|JZ NEAR| to table - ((imm) (15 132 rw/rd))
Adding :|JNE NEAR| to table - ((imm) (15 133 rw/rd))
Adding :|JNZ NEAR| to table - ((imm) (15 133 rw/rd))
Adding :|JBE NEAR| to table - ((imm) (15 134 rw/rd))
Adding :|JNA NEAR| to table - ((imm) (15 134 rw/rd))
Adding :|JA NEAR| to table - ((imm) (15 135 rw/rd))
Adding :|JNBE NEAR| to table - ((imm) (15 135 rw/rd))
Adding :|JS NEAR| to table - ((imm) (15 136 rw/rd))
Adding :|JNS NEAR| to table - ((imm) (15 137 rw/rd))
Adding :|JP NEAR| to table - ((imm) (15 138 rw/rd))
Adding :|JPE NEAR| to table - ((imm) (15 138 rw/rd))
Adding :|JNP NEAR| to table - ((imm) (15 139 rw/rd))
Adding :|JPO NEAR| to table - ((imm) (15 139 rw/rd))
Adding :|JL NEAR| to table - ((imm) (15 140 rw/rd))
Adding :|JNGE NEAR| to table - ((imm) (15 140 rw/rd))
Adding :|JGE NEAR| to table - ((imm) (15 141 rw/rd))
Adding :|JNL NEAR| to table - ((imm) (15 141 rw/rd))
Adding :|JLE NEAR| to table - ((imm) (15 142 rw/rd))
Adding :|JNG NEAR| to table - ((imm) (15 142 rw/rd))
Adding :|JG NEAR| to table - ((imm) (15 143 rw/rd))
Adding :|JNLE NEAR| to table - ((imm) (15 143 rw/rd))
Adding :J0 to table - ((imm) (112 rb))
Adding :JNO to table - ((imm) (113 rb))
Adding :JB to table - ((imm) (114 rb))
Adding :JC to table - ((imm) (114 rb))
Adding :JNAE to table - ((imm) (114 rb))
Adding :JAE to table - ((imm) (115 rb))
Adding :JNB to table - ((imm) (115 rb))
Adding :JNC to table - ((imm) (115 rb))
Adding :JE to table - ((imm) (116 rb))
Adding :JZ to table - ((imm) (116 rb))
Adding :JNE to table - ((imm) (117 rb))
Adding :JNZ to table - ((imm) (117 rb))
Adding :JBE to table - ((imm) (118 rb))
Adding :JNA to table - ((imm) (118 rb))
Adding :JA to table - ((imm) (119 rb))
Adding :JNBE to table - ((imm) (119 rb))
Adding :JS to table - ((imm) (120 rb))
Adding :JNS to table - ((imm) (121 rb))
Adding :JP to table - ((imm) (122 rb))
Adding :JPE to table - ((imm) (122 rb))
Adding :JNP to table - ((imm) (123 rb))
Adding :JPO to table - ((imm) (123 rb))
Adding :JL to table - ((imm) (124 rb))
Adding :JNGE to table - ((imm) (124 rb))
Adding :JGE to table - ((imm) (125 rb))
Adding :JNL to table - ((imm) (125 rb))
Adding :JLE to table - ((imm) (126 rb))
Adding :JNG to table - ((imm) (126 rb))
Adding :JG to table - ((imm) (127 rb))
Adding :JNLE to table - ((imm) (127 rb))
Adding :SET0 to table - ((r/m8) (15 144 /2))
Adding :SETNO to table - ((r/m8) (15 145 /2))
Adding :SETB to table - ((r/m8) (15 146 /2))
Adding :SETC to table - ((r/m8) (15 146 /2))
Adding :SETNAE to table - ((r/m8) (15 146 /2))
Adding :SETAE to table - ((r/m8) (15 147 /2))
Adding :SETNB to table - ((r/m8) (15 147 /2))
Adding :SETNC to table - ((r/m8) (15 147 /2))
Adding :SETE to table - ((r/m8) (15 148 /2))
Adding :SETZ to table - ((r/m8) (15 148 /2))
Adding :SETNE to table - ((r/m8) (15 149 /2))
Adding :SETNZ to table - ((r/m8) (15 149 /2))
Adding :SETBE to table - ((r/m8) (15 150 /2))
Adding :SETNA to table - ((r/m8) (15 150 /2))
Adding :SETA to table - ((r/m8) (15 151 /2))
Adding :SETNBE to table - ((r/m8) (15 151 /2))
Adding :SETS to table - ((r/m8) (15 152 /2))
Adding :SETNS to table - ((r/m8) (15 153 /2))
Adding :SETP to table - ((r/m8) (15 154 /2))
Adding :SETPE to table - ((r/m8) (15 154 /2))
Adding :SETNP to table - ((r/m8) (15 155 /2))
Adding :SETPO to table - ((r/m8) (15 155 /2))
Adding :SETL to table - ((r/m8) (15 156 /2))
Adding :SETNGE to table - ((r/m8) (15 156 /2))
Adding :SETGE to table - ((r/m8) (15 157 /2))
Adding :SETNL to table - ((r/m8) (15 157 /2))
Adding :SETLE to table - ((r/m8) (15 158 /2))
Adding :SETNG to table - ((r/m8) (15 158 /2))
Adding :SETG to table - ((r/m8) (15 159 /2))
Adding :SETNLE to table - ((r/m8) (15 159 /2))
Adding :CMOV0 to table - ((reg32 r/m32) (o32 15 64 /r))
Adding :CMOVNO to table - ((reg32 r/m32) (o32 15 65 /r))
Adding :CMOVB to table - ((reg32 r/m32) (o32 15 66 /r))
Adding :CMOVC to table - ((reg32 r/m32) (o32 15 66 /r))
Adding :CMOVNAE to table - ((reg32 r/m32) (o32 15 66 /r))
Adding :CMOVAE to table - ((reg32 r/m32) (o32 15 67 /r))
Adding :CMOVNB to table - ((reg32 r/m32) (o32 15 67 /r))
Adding :CMOVNC to table - ((reg32 r/m32) (o32 15 67 /r))
Adding :CMOVE to table - ((reg32 r/m32) (o32 15 68 /r))
Adding :CMOVZ to table - ((reg32 r/m32) (o32 15 68 /r))
Adding :CMOVNE to table - ((reg32 r/m32) (o32 15 69 /r))
Adding :CMOVNZ to table - ((reg32 r/m32) (o32 15 69 /r))
Adding :CMOVBE to table - ((reg32 r/m32) (o32 15 70 /r))
Adding :CMOVNA to table - ((reg32 r/m32) (o32 15 70 /r))
Adding :CMOVA to table - ((reg32 r/m32) (o32 15 71 /r))
Adding :CMOVNBE to table - ((reg32 r/m32) (o32 15 71 /r))
Adding :CMOVS to table - ((reg32 r/m32) (o32 15 72 /r))
Adding :CMOVNS to table - ((reg32 r/m32) (o32 15 73 /r))
Adding :CMOVP to table - ((reg32 r/m32) (o32 15 74 /r))
Adding :CMOVPE to table - ((reg32 r/m32) (o32 15 74 /r))
Adding :CMOVNP to table - ((reg32 r/m32) (o32 15 75 /r))
Adding :CMOVPO to table - ((reg32 r/m32) (o32 15 75 /r))
Adding :CMOVL to table - ((reg32 r/m32) (o32 15 76 /r))
Adding :CMOVNGE to table - ((reg32 r/m32) (o32 15 76 /r))
Adding :CMOVGE to table - ((reg32 r/m32) (o32 15 77 /r))
Adding :CMOVNL to table - ((reg32 r/m32) (o32 15 77 /r))
Adding :CMOVLE to table - ((reg32 r/m32) (o32 15 78 /r))
Adding :CMOVNG to table - ((reg32 r/m32) (o32 15 78 /r))
Adding :CMOVG to table - ((reg32 r/m32) (o32 15 79 /r))
Adding :CMOVNLE to table - ((reg32 r/m32) (o32 15 79 /r))
Adding :CMOV0 to table - ((reg16 r/m16) (o16 15 64 /r))
Adding :CMOVNO to table - ((reg16 r/m16) (o16 15 65 /r))
Adding :CMOVB to table - ((reg16 r/m16) (o16 15 66 /r))
Adding :CMOVC to table - ((reg16 r/m16) (o16 15 66 /r))
Adding :CMOVNAE to table - ((reg16 r/m16) (o16 15 66 /r))
Adding :CMOVAE to table - ((reg16 r/m16) (o16 15 67 /r))
Adding :CMOVNB to table - ((reg16 r/m16) (o16 15 67 /r))
Adding :CMOVNC to table - ((reg16 r/m16) (o16 15 67 /r))
Adding :CMOVE to table - ((reg16 r/m16) (o16 15 68 /r))
Adding :CMOVZ to table - ((reg16 r/m16) (o16 15 68 /r))
Adding :CMOVNE to table - ((reg16 r/m16) (o16 15 69 /r))
Adding :CMOVNZ to table - ((reg16 r/m16) (o16 15 69 /r))
Adding :CMOVBE to table - ((reg16 r/m16) (o16 15 70 /r))
Adding :CMOVNA to table - ((reg16 r/m16) (o16 15 70 /r))
Adding :CMOVA to table - ((reg16 r/m16) (o16 15 71 /r))
Adding :CMOVNBE to table - ((reg16 r/m16) (o16 15 71 /r))
Adding :CMOVS to table - ((reg16 r/m16) (o16 15 72 /r))
Adding :CMOVNS to table - ((reg16 r/m16) (o16 15 73 /r))
Adding :CMOVP to table - ((reg16 r/m16) (o16 15 74 /r))
Adding :CMOVPE to table - ((reg16 r/m16) (o16 15 74 /r))
Adding :CMOVNP to table - ((reg16 r/m16) (o16 15 75 /r))
Adding :CMOVPO to table - ((reg16 r/m16) (o16 15 75 /r))
Adding :CMOVL to table - ((reg16 r/m16) (o16 15 76 /r))
Adding :CMOVNGE to table - ((reg16 r/m16) (o16 15 76 /r))
Adding :CMOVGE to table - ((reg16 r/m16) (o16 15 77 /r))
Adding :CMOVNL to table - ((reg16 r/m16) (o16 15 77 /r))
Adding :CMOVLE to table - ((reg16 r/m16) (o16 15 78 /r))
Adding :CMOVNG to table - ((reg16 r/m16) (o16 15 78 /r))
Adding :CMOVG to table - ((reg16 r/m16) (o16 15 79 /r))
Adding :CMOVNLE to table - ((reg16 r/m16) (o16 15 79 /r))
NIL
CL-USER> (cl-x86-asm::make-segment "text" :segment-type 'data-segment :set-to-current t)
; Evaluation aborted
CL-USER> (cl-x86-asm::make-segment "text" :segment-type 'cl-x86-asm::data-segment :set-to-current t)
#
CL-USER> (cl-x86-asm::assemble-forms :AAD :RET)
Looking up instruction AAD
Found instruction AAD
Looking up instruction RET
Found instruction RET
(NIL NIL)
CL-USER>