bindings-bfd-1.2.0.0: src/Bindings/Bfd/Disasm/I386/Register.hs
module Bindings.Bfd.Disasm.I386.Register where
data Register = X Char Int Int
| I Char Int Int
| N Int Int Int
| P Char Int Int
| Q Int Int
| F Int
| Z Int Int Int
| S Char
| C [Register]
deriving (Eq, Ord, Show)
toRegister
:: String
-> Register
toRegister "ah" = X 'a' 8 15
toRegister "al" = X 'a' 0 7
toRegister "ax" = X 'a' 0 15
toRegister "bh" = X 'b' 8 15
toRegister "bl" = X 'b' 0 7
toRegister "bp" = P 'b' 0 15
toRegister "bpl" = P 'b' 0 7
toRegister "bx" = X 'b' 0 15
toRegister "ch" = X 'c' 8 15
toRegister "cl" = X 'c' 0 7
toRegister "cx" = X 'c' 0 15
toRegister "dh" = X 'd' 8 15
toRegister "di" = I 'd' 0 15
toRegister "dil" = I 'd' 0 7
toRegister "dl" = X 'd' 0 7
toRegister "ds" = S 'd'
toRegister "dx" = X 'd' 0 15
toRegister "dxax" = C [(X 'd' 0 15), (X 'a' 0 15)]
toRegister "eax" = X 'a' 0 31
toRegister "ebp" = P 'b' 0 31
toRegister "ebx" = X 'b' 0 31
toRegister "ecx" = X 'c' 0 31
toRegister "edi" = I 'd' 0 31
toRegister "edx" = X 'd' 0 31
toRegister "edxeax" = C [(X 'd' 0 31), (X 'a' 0 31)]
toRegister "es" = S 'e'
toRegister "esi" = I 's' 0 31
toRegister "fs" = S 'f'
toRegister "r8" = N 8 0 63
toRegister "r8b" = N 8 0 7
toRegister "r8d" = N 8 0 31
toRegister "r8w" = N 8 0 15
toRegister "r9" = N 9 0 63
toRegister "r9b" = N 9 0 7
toRegister "r9d" = N 9 0 31
toRegister "r9w" = N 9 0 15
toRegister "r10" = N 10 0 63
toRegister "r10b" = N 10 0 7
toRegister "r10d" = N 10 0 31
toRegister "r10w" = N 10 0 15
toRegister "r11" = N 11 0 63
toRegister "r11b" = N 11 0 7
toRegister "r11d" = N 11 0 31
toRegister "r11w" = N 11 0 15
toRegister "r12" = N 12 0 63
toRegister "r12b" = N 12 0 7
toRegister "r12d" = N 12 0 31
toRegister "r12w" = N 12 0 15
toRegister "r13" = N 13 0 63
toRegister "r13b" = N 13 0 7
toRegister "r13d" = N 13 0 31
toRegister "r13w" = N 13 0 15
toRegister "r14" = N 14 0 63
toRegister "r14b" = N 14 0 7
toRegister "r14d" = N 14 0 31
toRegister "r14w" = N 14 0 15
toRegister "r15" = N 15 0 63
toRegister "r15b" = N 15 0 7
toRegister "r15d" = N 15 0 31
toRegister "r15w" = N 15 0 15
toRegister "rax" = X 'a' 0 63
toRegister "rbp" = P 'b' 0 63
toRegister "rbx" = X 'b' 0 63
toRegister "rcx" = X 'c' 0 63
toRegister "rdi" = I 'd' 0 63
toRegister "rdx" = X 'd' 0 63
toRegister "rdxrax" = C [X 'd' 0 63, X 'a' 0 63]
toRegister "rip" = Q 0 63
toRegister "rsi" = I 's' 0 63
toRegister "rsp" = P 's' 0 63
toRegister "si" = I 's' 0 15
toRegister "sil" = I 's' 0 7
toRegister "st" = F (-1)
toRegister "st(0)" = F 0
toRegister "st(1)" = F 1
toRegister "xmm0" = Z 0 0 127
toRegister "xmm1" = Z 1 0 127
toRegister "xmm2" = Z 2 0 127
toRegister "xmm3" = Z 3 0 127
toRegister "xmm4" = Z 4 0 127
toRegister "xmm5" = Z 5 0 127
toRegister "xmm6" = Z 6 0 127
toRegister "xmm7" = Z 7 0 127
toRegister "xmm8" = Z 8 0 127
toRegister "xmm9" = Z 9 0 127
toRegister "xmm10" = Z 10 0 127
toRegister "xmm11" = Z 11 0 127
toRegister "xmm12" = Z 12 0 127
toRegister "xmm13" = Z 13 0 127
toRegister "xmm14" = Z 14 0 127
toRegister "xmm15" = Z 15 0 127
toRegister r = error $ "Register.toRegister: " ++ r
size
:: Register
-> Int
size (X _ a b) = b - a + 1
size (I _ a b) = b - a + 1
size (N _ a b) = b - a + 1
size (P _ a b) = b - a + 1
size (F _) = 80
size (Z _ a b) = b - a + 1
size (S _) = 16
size x = error $ "Register.size: " ++ show x
restrictBits
:: Int
-> Int
-> Register
-> Register
restrictBits a b (X r _ _) = X r a b
restrictBits a b (Z r _ _) = Z r a b
restrictBits _ _ r = error $ "Register.restrictBits: " ++ show r