123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- // i386 register table.
- // Copyright (C) 2007-2015 Free Software Foundation, Inc.
- //
- // This file is part of the GNU opcodes library.
- //
- // This library 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 3, or (at your option)
- // any later version.
- //
- // It 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 GAS; see the file COPYING. If not, write to the Free
- // Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
- // 02110-1301, USA.
- // Make %st first as we test for it.
- st, FloatReg|FloatAcc, 0, 0, 11, 33
- // 8 bit regs
- al, Reg8|Acc|Byte, 0, 0, Dw2Inval, Dw2Inval
- cl, Reg8|ShiftCount, 0, 1, Dw2Inval, Dw2Inval
- dl, Reg8, 0, 2, Dw2Inval, Dw2Inval
- bl, Reg8, 0, 3, Dw2Inval, Dw2Inval
- ah, Reg8, 0, 4, Dw2Inval, Dw2Inval
- ch, Reg8, 0, 5, Dw2Inval, Dw2Inval
- dh, Reg8, 0, 6, Dw2Inval, Dw2Inval
- bh, Reg8, 0, 7, Dw2Inval, Dw2Inval
- axl, Reg8|Acc|Byte, RegRex64, 0, Dw2Inval, Dw2Inval
- cxl, Reg8, RegRex64, 1, Dw2Inval, Dw2Inval
- dxl, Reg8, RegRex64, 2, Dw2Inval, Dw2Inval
- bxl, Reg8, RegRex64, 3, Dw2Inval, Dw2Inval
- spl, Reg8, RegRex64, 4, Dw2Inval, Dw2Inval
- bpl, Reg8, RegRex64, 5, Dw2Inval, Dw2Inval
- sil, Reg8, RegRex64, 6, Dw2Inval, Dw2Inval
- dil, Reg8, RegRex64, 7, Dw2Inval, Dw2Inval
- r8b, Reg8, RegRex|RegRex64, 0, Dw2Inval, Dw2Inval
- r9b, Reg8, RegRex|RegRex64, 1, Dw2Inval, Dw2Inval
- r10b, Reg8, RegRex|RegRex64, 2, Dw2Inval, Dw2Inval
- r11b, Reg8, RegRex|RegRex64, 3, Dw2Inval, Dw2Inval
- r12b, Reg8, RegRex|RegRex64, 4, Dw2Inval, Dw2Inval
- r13b, Reg8, RegRex|RegRex64, 5, Dw2Inval, Dw2Inval
- r14b, Reg8, RegRex|RegRex64, 6, Dw2Inval, Dw2Inval
- r15b, Reg8, RegRex|RegRex64, 7, Dw2Inval, Dw2Inval
- // 16 bit regs
- ax, Reg16|Acc|Word, 0, 0, Dw2Inval, Dw2Inval
- cx, Reg16, 0, 1, Dw2Inval, Dw2Inval
- dx, Reg16|InOutPortReg, 0, 2, Dw2Inval, Dw2Inval
- bx, Reg16|BaseIndex, 0, 3, Dw2Inval, Dw2Inval
- sp, Reg16, 0, 4, Dw2Inval, Dw2Inval
- bp, Reg16|BaseIndex, 0, 5, Dw2Inval, Dw2Inval
- si, Reg16|BaseIndex, 0, 6, Dw2Inval, Dw2Inval
- di, Reg16|BaseIndex, 0, 7, Dw2Inval, Dw2Inval
- r8w, Reg16, RegRex, 0, Dw2Inval, Dw2Inval
- r9w, Reg16, RegRex, 1, Dw2Inval, Dw2Inval
- r10w, Reg16, RegRex, 2, Dw2Inval, Dw2Inval
- r11w, Reg16, RegRex, 3, Dw2Inval, Dw2Inval
- r12w, Reg16, RegRex, 4, Dw2Inval, Dw2Inval
- r13w, Reg16, RegRex, 5, Dw2Inval, Dw2Inval
- r14w, Reg16, RegRex, 6, Dw2Inval, Dw2Inval
- r15w, Reg16, RegRex, 7, Dw2Inval, Dw2Inval
- // 32 bit regs
- eax, Reg32|BaseIndex|Acc|Dword, 0, 0, 0, Dw2Inval
- ecx, Reg32|BaseIndex, 0, 1, 1, Dw2Inval
- edx, Reg32|BaseIndex, 0, 2, 2, Dw2Inval
- ebx, Reg32|BaseIndex, 0, 3, 3, Dw2Inval
- esp, Reg32, 0, 4, 4, Dw2Inval
- ebp, Reg32|BaseIndex, 0, 5, 5, Dw2Inval
- esi, Reg32|BaseIndex, 0, 6, 6, Dw2Inval
- edi, Reg32|BaseIndex, 0, 7, 7, Dw2Inval
- r8d, Reg32|BaseIndex, RegRex, 0, Dw2Inval, Dw2Inval
- r9d, Reg32|BaseIndex, RegRex, 1, Dw2Inval, Dw2Inval
- r10d, Reg32|BaseIndex, RegRex, 2, Dw2Inval, Dw2Inval
- r11d, Reg32|BaseIndex, RegRex, 3, Dw2Inval, Dw2Inval
- r12d, Reg32|BaseIndex, RegRex, 4, Dw2Inval, Dw2Inval
- r13d, Reg32|BaseIndex, RegRex, 5, Dw2Inval, Dw2Inval
- r14d, Reg32|BaseIndex, RegRex, 6, Dw2Inval, Dw2Inval
- r15d, Reg32|BaseIndex, RegRex, 7, Dw2Inval, Dw2Inval
- rax, Reg64|BaseIndex|Acc|Qword, 0, 0, Dw2Inval, 0
- rcx, Reg64|BaseIndex, 0, 1, Dw2Inval, 2
- rdx, Reg64|BaseIndex, 0, 2, Dw2Inval, 1
- rbx, Reg64|BaseIndex, 0, 3, Dw2Inval, 3
- rsp, Reg64, 0, 4, Dw2Inval, 7
- rbp, Reg64|BaseIndex, 0, 5, Dw2Inval, 6
- rsi, Reg64|BaseIndex, 0, 6, Dw2Inval, 4
- rdi, Reg64|BaseIndex, 0, 7, Dw2Inval, 5
- r8, Reg64|BaseIndex, RegRex, 0, Dw2Inval, 8
- r9, Reg64|BaseIndex, RegRex, 1, Dw2Inval, 9
- r10, Reg64|BaseIndex, RegRex, 2, Dw2Inval, 10
- r11, Reg64|BaseIndex, RegRex, 3, Dw2Inval, 11
- r12, Reg64|BaseIndex, RegRex, 4, Dw2Inval, 12
- r13, Reg64|BaseIndex, RegRex, 5, Dw2Inval, 13
- r14, Reg64|BaseIndex, RegRex, 6, Dw2Inval, 14
- r15, Reg64|BaseIndex, RegRex, 7, Dw2Inval, 15
- // Vector mask registers.
- k0, RegMask, 0, 0, 93, 118
- k1, RegMask, 0, 1, 94, 119
- k2, RegMask, 0, 2, 95, 120
- k3, RegMask, 0, 3, 96, 121
- k4, RegMask, 0, 4, 97, 122
- k5, RegMask, 0, 5, 98, 123
- k6, RegMask, 0, 6, 99, 124
- k7, RegMask, 0, 7, 100, 125
- // Segment registers.
- es, SReg2, 0, 0, 40, 50
- cs, SReg2, 0, 1, 41, 51
- ss, SReg2, 0, 2, 42, 52
- ds, SReg2, 0, 3, 43, 53
- fs, SReg3, 0, 4, 44, 54
- gs, SReg3, 0, 5, 45, 55
- flat, SReg3, 0, RegFlat, Dw2Inval, Dw2Inval
- // Control registers.
- cr0, Control, 0, 0, Dw2Inval, Dw2Inval
- cr1, Control, 0, 1, Dw2Inval, Dw2Inval
- cr2, Control, 0, 2, Dw2Inval, Dw2Inval
- cr3, Control, 0, 3, Dw2Inval, Dw2Inval
- cr4, Control, 0, 4, Dw2Inval, Dw2Inval
- cr5, Control, 0, 5, Dw2Inval, Dw2Inval
- cr6, Control, 0, 6, Dw2Inval, Dw2Inval
- cr7, Control, 0, 7, Dw2Inval, Dw2Inval
- cr8, Control, RegRex, 0, Dw2Inval, Dw2Inval
- cr9, Control, RegRex, 1, Dw2Inval, Dw2Inval
- cr10, Control, RegRex, 2, Dw2Inval, Dw2Inval
- cr11, Control, RegRex, 3, Dw2Inval, Dw2Inval
- cr12, Control, RegRex, 4, Dw2Inval, Dw2Inval
- cr13, Control, RegRex, 5, Dw2Inval, Dw2Inval
- cr14, Control, RegRex, 6, Dw2Inval, Dw2Inval
- cr15, Control, RegRex, 7, Dw2Inval, Dw2Inval
- // Debug registers.
- db0, Debug, 0, 0, Dw2Inval, Dw2Inval
- db1, Debug, 0, 1, Dw2Inval, Dw2Inval
- db2, Debug, 0, 2, Dw2Inval, Dw2Inval
- db3, Debug, 0, 3, Dw2Inval, Dw2Inval
- db4, Debug, 0, 4, Dw2Inval, Dw2Inval
- db5, Debug, 0, 5, Dw2Inval, Dw2Inval
- db6, Debug, 0, 6, Dw2Inval, Dw2Inval
- db7, Debug, 0, 7, Dw2Inval, Dw2Inval
- db8, Debug, RegRex, 0, Dw2Inval, Dw2Inval
- db9, Debug, RegRex, 1, Dw2Inval, Dw2Inval
- db10, Debug, RegRex, 2, Dw2Inval, Dw2Inval
- db11, Debug, RegRex, 3, Dw2Inval, Dw2Inval
- db12, Debug, RegRex, 4, Dw2Inval, Dw2Inval
- db13, Debug, RegRex, 5, Dw2Inval, Dw2Inval
- db14, Debug, RegRex, 6, Dw2Inval, Dw2Inval
- db15, Debug, RegRex, 7, Dw2Inval, Dw2Inval
- dr0, Debug, 0, 0, Dw2Inval, Dw2Inval
- dr1, Debug, 0, 1, Dw2Inval, Dw2Inval
- dr2, Debug, 0, 2, Dw2Inval, Dw2Inval
- dr3, Debug, 0, 3, Dw2Inval, Dw2Inval
- dr4, Debug, 0, 4, Dw2Inval, Dw2Inval
- dr5, Debug, 0, 5, Dw2Inval, Dw2Inval
- dr6, Debug, 0, 6, Dw2Inval, Dw2Inval
- dr7, Debug, 0, 7, Dw2Inval, Dw2Inval
- dr8, Debug, RegRex, 0, Dw2Inval, Dw2Inval
- dr9, Debug, RegRex, 1, Dw2Inval, Dw2Inval
- dr10, Debug, RegRex, 2, Dw2Inval, Dw2Inval
- dr11, Debug, RegRex, 3, Dw2Inval, Dw2Inval
- dr12, Debug, RegRex, 4, Dw2Inval, Dw2Inval
- dr13, Debug, RegRex, 5, Dw2Inval, Dw2Inval
- dr14, Debug, RegRex, 6, Dw2Inval, Dw2Inval
- dr15, Debug, RegRex, 7, Dw2Inval, Dw2Inval
- // Test registers.
- tr0, Test, 0, 0, Dw2Inval, Dw2Inval
- tr1, Test, 0, 1, Dw2Inval, Dw2Inval
- tr2, Test, 0, 2, Dw2Inval, Dw2Inval
- tr3, Test, 0, 3, Dw2Inval, Dw2Inval
- tr4, Test, 0, 4, Dw2Inval, Dw2Inval
- tr5, Test, 0, 5, Dw2Inval, Dw2Inval
- tr6, Test, 0, 6, Dw2Inval, Dw2Inval
- tr7, Test, 0, 7, Dw2Inval, Dw2Inval
- // MMX and simd registers.
- mm0, RegMMX, 0, 0, 29, 41
- mm1, RegMMX, 0, 1, 30, 42
- mm2, RegMMX, 0, 2, 31, 43
- mm3, RegMMX, 0, 3, 32, 44
- mm4, RegMMX, 0, 4, 33, 45
- mm5, RegMMX, 0, 5, 34, 46
- mm6, RegMMX, 0, 6, 35, 47
- mm7, RegMMX, 0, 7, 36, 48
- xmm0, RegXMM, 0, 0, 21, 17
- xmm1, RegXMM, 0, 1, 22, 18
- xmm2, RegXMM, 0, 2, 23, 19
- xmm3, RegXMM, 0, 3, 24, 20
- xmm4, RegXMM, 0, 4, 25, 21
- xmm5, RegXMM, 0, 5, 26, 22
- xmm6, RegXMM, 0, 6, 27, 23
- xmm7, RegXMM, 0, 7, 28, 24
- xmm8, RegXMM, RegRex, 0, Dw2Inval, 25
- xmm9, RegXMM, RegRex, 1, Dw2Inval, 26
- xmm10, RegXMM, RegRex, 2, Dw2Inval, 27
- xmm11, RegXMM, RegRex, 3, Dw2Inval, 28
- xmm12, RegXMM, RegRex, 4, Dw2Inval, 29
- xmm13, RegXMM, RegRex, 5, Dw2Inval, 30
- xmm14, RegXMM, RegRex, 6, Dw2Inval, 31
- xmm15, RegXMM, RegRex, 7, Dw2Inval, 32
- xmm16, RegXMM, RegVRex, 0, Dw2Inval, 67
- xmm17, RegXMM, RegVRex, 1, Dw2Inval, 68
- xmm18, RegXMM, RegVRex, 2, Dw2Inval, 69
- xmm19, RegXMM, RegVRex, 3, Dw2Inval, 70
- xmm20, RegXMM, RegVRex, 4, Dw2Inval, 71
- xmm21, RegXMM, RegVRex, 5, Dw2Inval, 72
- xmm22, RegXMM, RegVRex, 6, Dw2Inval, 73
- xmm23, RegXMM, RegVRex, 7, Dw2Inval, 74
- xmm24, RegXMM, RegVRex|RegRex, 0, Dw2Inval, 75
- xmm25, RegXMM, RegVRex|RegRex, 1, Dw2Inval, 76
- xmm26, RegXMM, RegVRex|RegRex, 2, Dw2Inval, 77
- xmm27, RegXMM, RegVRex|RegRex, 3, Dw2Inval, 78
- xmm28, RegXMM, RegVRex|RegRex, 4, Dw2Inval, 79
- xmm29, RegXMM, RegVRex|RegRex, 5, Dw2Inval, 80
- xmm30, RegXMM, RegVRex|RegRex, 6, Dw2Inval, 81
- xmm31, RegXMM, RegVRex|RegRex, 7, Dw2Inval, 82
- // AVX registers.
- ymm0, RegYMM, 0, 0, Dw2Inval, Dw2Inval
- ymm1, RegYMM, 0, 1, Dw2Inval, Dw2Inval
- ymm2, RegYMM, 0, 2, Dw2Inval, Dw2Inval
- ymm3, RegYMM, 0, 3, Dw2Inval, Dw2Inval
- ymm4, RegYMM, 0, 4, Dw2Inval, Dw2Inval
- ymm5, RegYMM, 0, 5, Dw2Inval, Dw2Inval
- ymm6, RegYMM, 0, 6, Dw2Inval, Dw2Inval
- ymm7, RegYMM, 0, 7, Dw2Inval, Dw2Inval
- ymm8, RegYMM, RegRex, 0, Dw2Inval, Dw2Inval
- ymm9, RegYMM, RegRex, 1, Dw2Inval, Dw2Inval
- ymm10, RegYMM, RegRex, 2, Dw2Inval, Dw2Inval
- ymm11, RegYMM, RegRex, 3, Dw2Inval, Dw2Inval
- ymm12, RegYMM, RegRex, 4, Dw2Inval, Dw2Inval
- ymm13, RegYMM, RegRex, 5, Dw2Inval, Dw2Inval
- ymm14, RegYMM, RegRex, 6, Dw2Inval, Dw2Inval
- ymm15, RegYMM, RegRex, 7, Dw2Inval, Dw2Inval
- ymm16, RegYMM, RegVRex, 0, Dw2Inval, Dw2Inval
- ymm17, RegYMM, RegVRex, 1, Dw2Inval, Dw2Inval
- ymm18, RegYMM, RegVRex, 2, Dw2Inval, Dw2Inval
- ymm19, RegYMM, RegVRex, 3, Dw2Inval, Dw2Inval
- ymm20, RegYMM, RegVRex, 4, Dw2Inval, Dw2Inval
- ymm21, RegYMM, RegVRex, 5, Dw2Inval, Dw2Inval
- ymm22, RegYMM, RegVRex, 6, Dw2Inval, Dw2Inval
- ymm23, RegYMM, RegVRex, 7, Dw2Inval, Dw2Inval
- ymm24, RegYMM, RegVRex|RegRex, 0, Dw2Inval, Dw2Inval
- ymm25, RegYMM, RegVRex|RegRex, 1, Dw2Inval, Dw2Inval
- ymm26, RegYMM, RegVRex|RegRex, 2, Dw2Inval, Dw2Inval
- ymm27, RegYMM, RegVRex|RegRex, 3, Dw2Inval, Dw2Inval
- ymm28, RegYMM, RegVRex|RegRex, 4, Dw2Inval, Dw2Inval
- ymm29, RegYMM, RegVRex|RegRex, 5, Dw2Inval, Dw2Inval
- ymm30, RegYMM, RegVRex|RegRex, 6, Dw2Inval, Dw2Inval
- ymm31, RegYMM, RegVRex|RegRex, 7, Dw2Inval, Dw2Inval
- // AVX512 registers.
- zmm0, RegZMM, 0, 0, Dw2Inval, Dw2Inval
- zmm1, RegZMM, 0, 1, Dw2Inval, Dw2Inval
- zmm2, RegZMM, 0, 2, Dw2Inval, Dw2Inval
- zmm3, RegZMM, 0, 3, Dw2Inval, Dw2Inval
- zmm4, RegZMM, 0, 4, Dw2Inval, Dw2Inval
- zmm5, RegZMM, 0, 5, Dw2Inval, Dw2Inval
- zmm6, RegZMM, 0, 6, Dw2Inval, Dw2Inval
- zmm7, RegZMM, 0, 7, Dw2Inval, Dw2Inval
- zmm8, RegZMM, RegRex, 0, Dw2Inval, Dw2Inval
- zmm9, RegZMM, RegRex, 1, Dw2Inval, Dw2Inval
- zmm10, RegZMM, RegRex, 2, Dw2Inval, Dw2Inval
- zmm11, RegZMM, RegRex, 3, Dw2Inval, Dw2Inval
- zmm12, RegZMM, RegRex, 4, Dw2Inval, Dw2Inval
- zmm13, RegZMM, RegRex, 5, Dw2Inval, Dw2Inval
- zmm14, RegZMM, RegRex, 6, Dw2Inval, Dw2Inval
- zmm15, RegZMM, RegRex, 7, Dw2Inval, Dw2Inval
- zmm16, RegZMM, RegVRex, 0, Dw2Inval, Dw2Inval
- zmm17, RegZMM, RegVRex, 1, Dw2Inval, Dw2Inval
- zmm18, RegZMM, RegVRex, 2, Dw2Inval, Dw2Inval
- zmm19, RegZMM, RegVRex, 3, Dw2Inval, Dw2Inval
- zmm20, RegZMM, RegVRex, 4, Dw2Inval, Dw2Inval
- zmm21, RegZMM, RegVRex, 5, Dw2Inval, Dw2Inval
- zmm22, RegZMM, RegVRex, 6, Dw2Inval, Dw2Inval
- zmm23, RegZMM, RegVRex, 7, Dw2Inval, Dw2Inval
- zmm24, RegZMM, RegVRex|RegRex, 0, Dw2Inval, Dw2Inval
- zmm25, RegZMM, RegVRex|RegRex, 1, Dw2Inval, Dw2Inval
- zmm26, RegZMM, RegVRex|RegRex, 2, Dw2Inval, Dw2Inval
- zmm27, RegZMM, RegVRex|RegRex, 3, Dw2Inval, Dw2Inval
- zmm28, RegZMM, RegVRex|RegRex, 4, Dw2Inval, Dw2Inval
- zmm29, RegZMM, RegVRex|RegRex, 5, Dw2Inval, Dw2Inval
- zmm30, RegZMM, RegVRex|RegRex, 6, Dw2Inval, Dw2Inval
- zmm31, RegZMM, RegVRex|RegRex, 7, Dw2Inval, Dw2Inval
- // Bound registers for MPX
- bnd0, RegBND, 0, 0, Dw2Inval, Dw2Inval
- bnd1, RegBND, 0, 1, Dw2Inval, Dw2Inval
- bnd2, RegBND, 0, 2, Dw2Inval, Dw2Inval
- bnd3, RegBND, 0, 3, Dw2Inval, Dw2Inval
- // No type will make these registers rejected for all purposes except
- // for addressing. This saves creating one extra type for RIP/EIP.
- rip, BaseIndex, RegRex64, RegRip, Dw2Inval, 16
- eip, BaseIndex, RegRex64, RegEip, 8, Dw2Inval
- // No type will make these registers rejected for all purposes except
- // for addressing.
- riz, BaseIndex, RegRex64, RegRiz, Dw2Inval, Dw2Inval
- eiz, BaseIndex, 0, RegEiz, Dw2Inval, Dw2Inval
- // fp regs.
- st(0), FloatReg|FloatAcc, 0, 0, 11, 33
- st(1), FloatReg, 0, 1, 12, 34
- st(2), FloatReg, 0, 2, 13, 35
- st(3), FloatReg, 0, 3, 14, 36
- st(4), FloatReg, 0, 4, 15, 37
- st(5), FloatReg, 0, 5, 16, 38
- st(6), FloatReg, 0, 6, 17, 39
- st(7), FloatReg, 0, 7, 18, 40
- // Pseudo-register names only used in .cfi_* directives
- eflags, 0, 0, 0, 9, 49
- rflags, 0, 0, 0, Dw2Inval, 49
- fs.base, 0, 0, 0, Dw2Inval, 58
- gs.base, 0, 0, 0, Dw2Inval, 59
- tr, 0, 0, 0, 48, 62
- ldtr, 0, 0, 0, 49, 63
- // st0...7 for backward compatibility
- st0, 0, 0, 0, 11, 33
- st1, 0, 0, 1, 12, 34
- st2, 0, 0, 2, 13, 35
- st3, 0, 0, 3, 14, 36
- st4, 0, 0, 4, 15, 37
- st5, 0, 0, 5, 16, 38
- st6, 0, 0, 6, 17, 39
- st7, 0, 0, 7, 18, 40
- fcw, 0, 0, 0, 37, 65
- fsw, 0, 0, 0, 38, 66
- mxcsr, 0, 0, 0, 39, 64
|