module Class.E ( E (..) ) where import qualified Asm.Aarch64 as AArch64 import qualified Asm.X86 as X86 class E a where toInt :: a -> Int instance E X86.X86Reg where toInt :: X86Reg -> Int toInt X86Reg X86.Rdi = Int 0 toInt X86Reg X86.Rsi = Int 1 toInt X86Reg X86.Rdx = Int 2 toInt X86Reg X86.Rcx = Int 3 toInt X86Reg X86.R8 = Int 4 toInt X86Reg X86.R9 = Int 5 toInt X86Reg X86.Rax = Int 6 toInt X86Reg X86.Rsp = Int 7 toInt X86Reg X86.R10 = -Int 1 toInt X86Reg X86.R11 = -Int 2 toInt X86Reg X86.R12 = -Int 3 toInt X86Reg X86.R13 = -Int 4 toInt X86Reg X86.R14 = -Int 13 toInt X86Reg X86.R15 = -Int 14 toInt X86Reg X86.Rbx = -Int 15 toInt X86Reg X86.Rbp = -Int 16 instance E X86.FX86Reg where toInt :: FX86Reg -> Int toInt FX86Reg X86.XMM0 = Int 8 toInt FX86Reg X86.XMM1 = Int 9 toInt FX86Reg X86.XMM2 = Int 10 toInt FX86Reg X86.XMM3 = Int 11 toInt FX86Reg X86.XMM4 = Int 12 toInt FX86Reg X86.XMM5 = Int 13 toInt FX86Reg X86.XMM6 = Int 14 toInt FX86Reg X86.XMM7 = Int 15 toInt FX86Reg X86.XMM8 = -Int 5 toInt FX86Reg X86.XMM9 = -Int 6 toInt FX86Reg X86.XMM10 = -Int 7 toInt FX86Reg X86.XMM11 = -Int 8 toInt FX86Reg X86.XMM12 = -Int 9 toInt FX86Reg X86.XMM13 = -Int 10 toInt FX86Reg X86.XMM14 = -Int 11 toInt FX86Reg X86.XMM15 = -Int 12 instance E X86.F2X86 where toInt :: F2X86 -> Int toInt F2X86 X86.YMM0 = Int 8 toInt F2X86 X86.YMM1 = Int 9 toInt F2X86 X86.YMM2 = Int 10 toInt F2X86 X86.YMM3 = Int 11 toInt F2X86 X86.YMM4 = Int 12 toInt F2X86 X86.YMM5 = Int 13 toInt F2X86 X86.YMM6 = Int 14 toInt F2X86 X86.YMM7 = Int 15 toInt F2X86 X86.YMM8 = -Int 5 toInt F2X86 X86.YMM9 = -Int 6 toInt F2X86 X86.YMM10 = -Int 7 toInt F2X86 X86.YMM11 = -Int 8 toInt F2X86 X86.YMM12 = -Int 9 toInt F2X86 X86.YMM13 = -Int 10 toInt F2X86 X86.YMM14 = -Int 11 toInt F2X86 X86.YMM15 = -Int 12 instance E X86.AbsReg where toInt :: AbsReg -> Int toInt = AbsReg -> Int X86.toInt instance E X86.FAbsReg where toInt :: FAbsReg -> Int toInt = FAbsReg -> Int X86.fToInt instance E AArch64.AReg where toInt :: AReg -> Int toInt AReg AArch64.X0 = Int 0 toInt AReg AArch64.X1 = Int 1 toInt AReg AArch64.X2 = Int 2 toInt AReg AArch64.X3 = Int 3 toInt AReg AArch64.X4 = Int 4 toInt AReg AArch64.X5 = Int 5 toInt AReg AArch64.X6 = Int 6 toInt AReg AArch64.X7 = Int 7 toInt AReg AArch64.X8 = -Int 1 toInt AReg AArch64.X9 = -Int 2 toInt AReg AArch64.X10 = -Int 3 toInt AReg AArch64.X11 = -Int 4 toInt AReg AArch64.X12 = -Int 5 toInt AReg AArch64.X13 = -Int 6 toInt AReg AArch64.X14 = -Int 7 toInt AReg AArch64.X15 = -Int 8 toInt AReg AArch64.X16 = -Int 9 toInt AReg AArch64.X17 = -Int 10 toInt AReg AArch64.X18 = -Int 11 toInt AReg AArch64.X19 = -Int 12 toInt AReg AArch64.X20 = -Int 13 toInt AReg AArch64.X21 = -Int 14 toInt AReg AArch64.X22 = -Int 15 toInt AReg AArch64.X23 = -Int 16 toInt AReg AArch64.X24 = -Int 17 toInt AReg AArch64.X25 = -Int 18 toInt AReg AArch64.X26 = -Int 19 toInt AReg AArch64.X27 = -Int 20 toInt AReg AArch64.X28 = -Int 21 toInt AReg AArch64.X29 = Int 18 toInt AReg AArch64.X30 = Int 8 toInt AReg AArch64.SP = Int 9 instance E AArch64.FAReg where toInt :: FAReg -> Int toInt FAReg AArch64.D0 = Int 10 toInt FAReg AArch64.D1 = Int 11 toInt FAReg AArch64.D2 = Int 12 toInt FAReg AArch64.D3 = Int 13 toInt FAReg AArch64.D4 = Int 14 toInt FAReg AArch64.D5 = Int 15 toInt FAReg AArch64.D6 = Int 16 toInt FAReg AArch64.D7 = Int 17 toInt FAReg AArch64.D8 = -Int 23 toInt FAReg AArch64.D9 = -Int 24 toInt FAReg AArch64.D10 = -Int 25 toInt FAReg AArch64.D11 = -Int 26 toInt FAReg AArch64.D12 = -Int 27 toInt FAReg AArch64.D13 = -Int 28 toInt FAReg AArch64.D14 = -Int 29 toInt FAReg AArch64.D15 = -Int 30 toInt FAReg AArch64.D16 = -Int 31 toInt FAReg AArch64.D17 = -Int 32 toInt FAReg AArch64.D18 = -Int 33 toInt FAReg AArch64.D19 = -Int 34 toInt FAReg AArch64.D20 = -Int 35 toInt FAReg AArch64.D21 = -Int 36 toInt FAReg AArch64.D22 = -Int 37 toInt FAReg AArch64.D23 = -Int 38 toInt FAReg AArch64.D24 = -Int 39 toInt FAReg AArch64.D25 = -Int 40 toInt FAReg AArch64.D26 = -Int 41 toInt FAReg AArch64.D27 = -Int 42 toInt FAReg AArch64.D28 = -Int 43 toInt FAReg AArch64.D29 = -Int 44 toInt FAReg AArch64.D30 = -Int 45 toInt FAReg AArch64.D31 = -Int 46 instance E AArch64.F2Reg where toInt :: F2Reg -> Int toInt F2Reg AArch64.V0 = Int 10 toInt F2Reg AArch64.V1 = Int 11 toInt F2Reg AArch64.V2 = Int 12 toInt F2Reg AArch64.V3 = Int 13 toInt F2Reg AArch64.V4 = Int 14 toInt F2Reg AArch64.V5 = Int 15 toInt F2Reg AArch64.V6 = Int 16 toInt F2Reg AArch64.V7 = Int 17 toInt F2Reg AArch64.V8 = -Int 23 toInt F2Reg AArch64.V9 = -Int 24 toInt F2Reg AArch64.V10 = -Int 25 toInt F2Reg AArch64.V11 = -Int 26 toInt F2Reg AArch64.V12 = -Int 27 toInt F2Reg AArch64.V13 = -Int 28 toInt F2Reg AArch64.V14 = -Int 29 toInt F2Reg AArch64.V15 = -Int 30 toInt F2Reg AArch64.V16 = -Int 31 toInt F2Reg AArch64.V17 = -Int 32 toInt F2Reg AArch64.V18 = -Int 33 toInt F2Reg AArch64.V19 = -Int 34 toInt F2Reg AArch64.V20 = -Int 35 toInt F2Reg AArch64.V21 = -Int 36 toInt F2Reg AArch64.V22 = -Int 37 toInt F2Reg AArch64.V23 = -Int 38 toInt F2Reg AArch64.V24 = -Int 39 toInt F2Reg AArch64.V25 = -Int 40 toInt F2Reg AArch64.V26 = -Int 41 toInt F2Reg AArch64.V27 = -Int 42 toInt F2Reg AArch64.V28 = -Int 43 toInt F2Reg AArch64.V29 = -Int 44 toInt F2Reg AArch64.V30 = -Int 45 toInt F2Reg AArch64.V31 = -Int 46 instance E AArch64.AbsReg where toInt :: AbsReg -> Int toInt = AbsReg -> Int AArch64.toInt instance E AArch64.FAbsReg where toInt :: FAbsReg -> Int toInt = FAbsReg -> Int AArch64.fToInt instance E AArch64.F2Abs where toInt :: F2Abs -> Int toInt = F2Abs -> Int AArch64.f2ToInt