Have sign-extend-complex deal correctly with bytes of size 0.
[movitz-ia-x86.git] / instr-cmp.lisp
blobbfaea2ec764d54315280ef3055eb60484567559c
1 ;;;;------------------------------------------------------------------
2 ;;;;
3 ;;;; Copyright (C) 20012000, 2002,
4 ;;;; Department of Computer Science, University of Tromso, Norway
5 ;;;;
6 ;;;; Filename: instr-cmp.lisp
7 ;;;; Description:
8 ;;;; Author: Frode Vatvedt Fjeld <frodef@acm.org>
9 ;;;; Created at: Sat Jan 29 20:57:45 2000
10 ;;;; Distribution: See the accompanying file COPYING.
11 ;;;;
12 ;;;; $Id: instr-cmp.lisp,v 1.2 2004/01/16 11:54:14 ffjeld Exp $
13 ;;;;
14 ;;;;------------------------------------------------------------------
16 (in-package "IA-X86-INSTR")
18 ;;; ----------------------------------------------------------------
19 ;;; CMP [IISR page 11-64]
20 ;;; ----------------------------------------------------------------
22 (def-instr cmp (instruction))
23 (def-instr cmpb (cmp)
24 (:plain #x3c (0 1) (imm8 al))
25 (:digit (#x80 7) 1 (imm8 r/m8))
26 (:r #x38 (r8 r/m8))
27 (:r #x3a (r/m8 r8)))
29 (def-instr cmpw (cmp)
30 (:plain #x3d (0 2) (imm16 ax) :operand-mode :16-bit)
31 (:digit (#x81 7) 2 (imm16 r/m16) :operand-mode :16-bit)
32 (:digit (#x83 7) 1 (simm8 r/m16) :operand-mode :16-bit)
33 (:r #x39 (r16 r/m16) :operand-mode :16-bit)
34 (:r #x3b (r/m16 r16) :operand-mode :16-bit))
36 (def-instr cmpl (cmp)
37 (:plain #x3d (0 4) (simm32 eax) :operand-mode :32-bit)
38 (:digit (#x81 7) 4 (simm32 r/m32) :operand-mode :32-bit)
39 (:digit (#x83 7) 1 (simm8 r/m32) :operand-mode :32-bit)
40 (:r #x39 (r32 r/m32) :operand-mode :32-bit)
41 (:r #x3b (r/m32 r32) :operand-mode :32-bit))
43 ;;; ----------------------------------------------------------------
44 ;;; TEST [IISR page 11-377]
45 ;;; ----------------------------------------------------------------
47 (def-instr test (instruction))
48 (def-instr testb (test)
49 (:plain #xa8 (0 1) (imm8 al))
50 (:digit (#xf6 0) 1 (imm8 r/m8))
51 (:r #x84 (r8 r/m8)))
53 (def-instr testw (test)
54 (:plain #xa9 (0 2) (imm16 ax) :operand-mode :16-bit)
55 (:digit (#xf7 0) 2 (imm16 r/m16) :operand-mode :16-bit)
56 (:r #x85 (r16 r/m16) :operand-mode :16-bit))
58 (def-instr testl (test)
59 (:plain #xa9 (0 4) (imm32 eax) :operand-mode :32-bit)
60 (:digit (#xf7 0) 4 (imm32 r/m32) :operand-mode :32-bit)
61 (:r #x85 (r32 r/m32) :operand-mode :32-bit))
63 ;;; Compare and Exchange
65 (def-instr cmpxchg (cmp)
66 (:r #x0fb0 (r8 r/m8))
67 (:r #x0fb1 (r16 r/m16) :operand-mode :16-bit)
68 (:r #x0fb1 (r32 r/m32) :operand-mode :32-bit))
70 (def-instr cmpxchg8b (cmpxchg)
71 (:digit (#x0fc7 1) 0 (m64) :indirect t))