Have sign-extend-complex deal correctly with bytes of size 0.
[movitz-ia-x86.git] / instr-bit.lisp
blob2f898d0c605e633d1ea6e5c9bcb6c9a940dfc8cd
1 ;;;;------------------------------------------------------------------
2 ;;;;
3 ;;;; Copyright (C) 2000,
4 ;;;; Department of Computer Science, University of Tromso, Norway
5 ;;;;
6 ;;;; Filename: ia-x86-instr-bit.lisp
7 ;;;; Description: Bit operations.
8 ;;;; Author: Frode Vatvedt Fjeld <frodef@acm.org>
9 ;;;; Created at: Tue Feb 1 20:03:30 2000
10 ;;;; Distribution: See the accompanying file COPYING.
11 ;;;;
12 ;;;; $Id: instr-bit.lisp,v 1.2 2004/01/16 11:54:14 ffjeld Exp $
13 ;;;;
14 ;;;;------------------------------------------------------------------
16 (in-package "IA-X86-INSTR")
18 ;;; ----------------------------------------------------------------
19 ;;; Bit instructions
20 ;;; ----------------------------------------------------------------
22 (def-instr bsf (instruction)) ; bit scan forward
23 (def-instr bsfw (bsf) (:r #c(#x0fbc 2) (r/m16 r16) :operand-mode :16-bit))
24 (def-instr bsfl (bsf) (:r #c(#x0fbc 2) (r/m32 r32) :operand-mode :32-bit))
26 (def-instr bsr (instruction)) ; bit scan reverse
27 (def-instr bsrw (bsr) (:r #c(#x0fbd 2) (r/m16 r16) :operand-mode :16-bit))
28 (def-instr bsrl (bsr) (:r #c(#x0fbd 2) (r/m32 r32) :operand-mode :32-bit))
30 ;;; Bit Test
32 (def-instr bt (instruction))
34 (def-instr btw (bt)
35 (:r #c(#x0fa3 2) (r16 r/m16) :operand-mode :16-bit)
36 (:digit (#c(#x0fba 2) 4) 1 (imm8 r/m16) :operand-mode :16-bit))
38 (def-instr btl (bt)
39 (:r #c(#x0fa3 2) (r32 r/m32) :operand-mode :32-bit)
40 (:digit (#c(#x0fba 2) 4) 1 (imm8 r/m32) :operand-mode :32-bit))
43 ;;; bit test and complement
45 (def-instr btc (instruction))
47 (def-instr btcw (btc)
48 (:r #c(#x0fbb 2) (r16 r/m16) :operand-mode :16-bit)
49 (:digit (#c(#x0fba 2) 7) 1 (imm8 r/m16) :operand-mode :16-bit))
51 (def-instr btcl (btc)
52 (:r #c(#x0fbb 2) (r32 r/m32) :operand-mode :32-bit)
53 (:digit (#c(#x0fba 2) 7) 1 (imm8 r/m32) :operand-mode :32-bit))
56 ;;; bit test and reset
58 (def-instr btr (instruction))
60 (def-instr btrw (btr)
61 (:r #c(#x0fb3 2) (r16 r/m16) :operand-mode :16-bit)
62 (:digit (#c(#x0fba 2) 6) 1 (imm8 r/m16) :operand-mode :16-bit))
64 (def-instr btrl (btr)
65 (:r #c(#x0fb3 2) (r32 r/m32) :operand-mode :32-bit)
66 (:digit (#c(#x0fba 2) 6) 1 (imm8 r/m32) :operand-mode :32-bit))
68 ;;; bit test and set
70 (def-instr bts (instruction))
72 (def-instr btsw (bts)
73 (:r #c(#x0fab 2) (r16 r/m16) :operand-mode :16-bit)
74 (:digit (#c(#x0fba 2) 5) 1 (imm8 r/m16) :operand-mode :16-bit))
76 (def-instr btsl (bts)
77 (:r #c(#x0fab 2) (r32 r/m32) :operand-mode :32-bit)
78 (:digit (#c(#x0fba 2) 5) 1 (imm8 r/m32) :operand-mode :32-bit))