/*++

Copyright (c) 1992-2000  Microsoft Corporation

Module Name:
    findreg.c

Abstract:
    Maps CV register values to debugger's values

Environment:

    User Mode.

Revision History:

    Kshitiz K. Sharma (kksharma) 3/6/2000

--*/

#include "private.h"
#include "cvinfo.h"
#include "..\ntsd64\i386_reg.h"
#include "..\ntsd64\ia64_reg.h"
#include "..\ntsd64\alpha_reg.h"

typedef struct _REGISTER_LOOKUP {
    ULONG  CVReg;
    ULONG  DbgReg;
} REGISTER_LOOKUP, *PREGISTER_LOOKUP;

REGISTER_LOOKUP gRegLookupX86[] = {
    { CV_REG_AL, X86_AL},
    { CV_REG_CL, X86_CL},
    { CV_REG_DL, X86_DL},
    { CV_REG_BL, X86_BL},
    { CV_REG_AH, X86_AH},
    { CV_REG_CH, X86_CH},
    { CV_REG_DH, X86_DH},
    { CV_REG_BH, X86_BH},
    { CV_REG_AX, X86_AX},
    { CV_REG_CX, X86_CX},
    { CV_REG_DX, X86_DX},
    { CV_REG_BX, X86_BX},
    { CV_REG_SP, X86_SP},
    { CV_REG_BP, X86_BP},
    { CV_REG_SI, X86_SI},
    { CV_REG_DI, X86_DI},
    { CV_REG_EAX, X86_EAX},
    { CV_REG_ECX, X86_ECX},
    { CV_REG_EDX, X86_EDX},
    { CV_REG_EBX, X86_EBX},
    { CV_REG_ESP, X86_ESP},
    { CV_REG_EBP, X86_EBP},
    { CV_REG_ESI, X86_ESI},
    { CV_REG_EDI, X86_EDI},
    { CV_REG_ES, X86_ES},
    { CV_REG_CS, X86_CS},
    { CV_REG_SS, X86_SS},
    { CV_REG_DS, X86_DS},
    { CV_REG_FS, X86_FS},
    { CV_REG_GS, X86_GS},
    { CV_REG_IP, X86_IP},
    { CV_REG_FLAGS, X86_FL},
    { CV_REG_EIP, X86_EIP},
    { CV_REG_EFLAGS, X86_EFL},
//    { CV_REG_TEMP, REGTEMP},
//    { CV_REG_TEMPH, REGTEMPH},
//    { CV_REG_QUOTE, REGQUOTE},
//    { CV_REG_PCDR3, REGPCDR3},
//    { CV_REG_PCDR4, REGPCDR4},
//    { CV_REG_PCDR5, REGPCDR5},
//    { CV_REG_PCDR6, REGPCDR6},
//    { CV_REG_PCDR7, REGPCDR7},
    { CV_REG_CR0, X86_CR0},
//    { CV_REG_CR1, REGCR1},
    { CV_REG_CR2, X86_CR2},
    { CV_REG_CR3, X86_CR3},
    { CV_REG_CR4, X86_CR4},
    { CV_REG_DR0, X86_DR0},
    { CV_REG_DR1, X86_DR1},
    { CV_REG_DR2, X86_DR2},
    { CV_REG_DR3, X86_DR3},
//    { CV_REG_DR4, REGDR4},
//    { CV_REG_DR5, REGDR5},
    { CV_REG_DR6, X86_DR6},
    { CV_REG_DR7, X86_DR7},
    { CV_REG_GDTR, X86_GDTR},
    { CV_REG_GDTL, X86_GDTL},
    { CV_REG_IDTR, X86_IDTR},
    { CV_REG_IDTL, X86_IDTL},
    { CV_REG_LDTR, X86_LDTR},
    { CV_REG_TR, X86_TR},

//    { CV_REG_PSEUDO1, REGPSEUDO1},
//    { CV_REG_PSEUDO2, REGPSEUDO2},
//    { CV_REG_PSEUDO3, REGPSEUDO3},
//    { CV_REG_PSEUDO4, REGPSEUDO4},
//    { CV_REG_PSEUDO5, REGPSEUDO5},
//    { CV_REG_PSEUDO6, REGPSEUDO6},
//    { CV_REG_PSEUDO7, REGPSEUDO7},
//    { CV_REG_PSEUDO8, REGPSEUDO8},
//    { CV_REG_PSEUDO9, REGPSEUDO9},

    { CV_REG_ST0, X86_ST0},
    { CV_REG_ST1, X86_ST1},
    { CV_REG_ST2, X86_ST2},
    { CV_REG_ST3, X86_ST3},
    { CV_REG_ST4, X86_ST4},
    { CV_REG_ST5, X86_ST5},
    { CV_REG_ST6, X86_ST6},
    { CV_REG_ST7, X86_ST7},
    { CV_REG_CTRL, X86_FPCW},
    { CV_REG_STAT, X86_FPSW},
    { CV_REG_TAG, X86_FPTW},
//    { CV_REG_FPIP, REGFPIP},
//    { CV_REG_FPCS, REGFPCS},
//    { CV_REG_FPDO, REGFPDO},
//    { CV_REG_FPDS, REGFPDS},
//    { CV_REG_ISEM, REGISEM},
//    { CV_REG_FPEIP, REGFPEIP},
//    { CV_REG_FPEDO, REGFPEDO},

    { CV_REG_MM0, X86_MM0},
    { CV_REG_MM1, X86_MM1},
    { CV_REG_MM2, X86_MM2},
    { CV_REG_MM3, X86_MM3},
    { CV_REG_MM4, X86_MM4},
    { CV_REG_MM5, X86_MM5},
    { CV_REG_MM6, X86_MM6},
    { CV_REG_MM7, X86_MM7},

};

REGISTER_LOOKUP gRegLookupIa64[] = {

    // Branch Registers

    { CV_IA64_Br0, BRRP},
    { CV_IA64_Br1, BRS0},
    { CV_IA64_Br2, BRS1},
    { CV_IA64_Br3, BRS2},
    { CV_IA64_Br4, BRS3},
    { CV_IA64_Br5, BRS4},
    { CV_IA64_Br6, BRT0},
    { CV_IA64_Br7, BRT1},

    // Predicate Registers

    { CV_IA64_Preds, PREDS},

    // Banked General Registers
/*
    { CV_IA64_IntH0, IntH0},
    { CV_IA64_IntH1, IntH1},
    { CV_IA64_IntH2, IntH2},
    { CV_IA64_IntH3, IntH3},
    { CV_IA64_IntH4, IntH4},
    { CV_IA64_IntH5, IntH5},
    { CV_IA64_IntH6, IntH6},
    { CV_IA64_IntH7, IntH7},
    { CV_IA64_IntH8, IntH8},
    { CV_IA64_IntH9, IntH9},
    { CV_IA64_IntH10, IntH10},
    { CV_IA64_IntH11, IntH11},
    { CV_IA64_IntH12, IntH12},
    { CV_IA64_IntH13, IntH13},
    { CV_IA64_IntH14, IntH14},
    { CV_IA64_IntH15, IntH15},

    // Special Registers

    { CV_IA64_Ip, Ip},
    { CV_IA64_Umask, Umask},
    { CV_IA64_Cfm, Cfm},
    { CV_IA64_Psr, Psr},

    // Banked General Registers

    { CV_IA64_Nats, Nats},
    { CV_IA64_Nats2, Nats2},
    { CV_IA64_Nats3, Nats3},
*/
    // General-Purpose Registers

    // INTEGER REGISTER
  //  { CV_IA64_IntR0, IntZero},
    { CV_IA64_IntR1, INTGP},
    { CV_IA64_IntR2, INTT0},
    { CV_IA64_IntR3, INTT1},
    { CV_IA64_IntR4, INTS0},
    { CV_IA64_IntR5, INTS1},
    { CV_IA64_IntR6, INTS2},
    { CV_IA64_IntR7, INTS3},
    { CV_IA64_IntR8, INTV0},
//    { CV_IA64_IntR9, INTAP},
    { CV_IA64_IntR10, INTT2},
    { CV_IA64_IntR11, INTT3},
    { CV_IA64_IntR12, INTSP},
    { CV_IA64_IntR13, INTT4},
    { CV_IA64_IntR14, INTT5},
    { CV_IA64_IntR15, INTT6},
    { CV_IA64_IntR16, INTT7},
    { CV_IA64_IntR17, INTT8},
    { CV_IA64_IntR18, INTT9},
    { CV_IA64_IntR19, INTT10},
    { CV_IA64_IntR20, INTT11},
    { CV_IA64_IntR21, INTT12},
    { CV_IA64_IntR22, INTT13},
    { CV_IA64_IntR23, INTT14},
    { CV_IA64_IntR24, INTT15},
    { CV_IA64_IntR25, INTT16},
    { CV_IA64_IntR26, INTT17},
    { CV_IA64_IntR27, INTT18},
    { CV_IA64_IntR28, INTT19},
    { CV_IA64_IntR29, INTT20},
    { CV_IA64_IntR30, INTT21},
    { CV_IA64_IntR31, INTT22},

    // Register Stack
    { CV_IA64_IntR32, INTR32},
    { CV_IA64_IntR33, INTR33},
    { CV_IA64_IntR34, INTR34},
    { CV_IA64_IntR35, INTR35},
    { CV_IA64_IntR36, INTR36},
    { CV_IA64_IntR37, INTR37},
    { CV_IA64_IntR38, INTR38},
    { CV_IA64_IntR39, INTR39},
    { CV_IA64_IntR40, INTR40},
    { CV_IA64_IntR41, INTR41},
    { CV_IA64_IntR42, INTR42},
    { CV_IA64_IntR43, INTR43},
    { CV_IA64_IntR44, INTR44},
    { CV_IA64_IntR45, INTR45},
    { CV_IA64_IntR46, INTR46},
    { CV_IA64_IntR47, INTR47},
    { CV_IA64_IntR48, INTR48},
    { CV_IA64_IntR49, INTR49},
    { CV_IA64_IntR50, INTR50},
    { CV_IA64_IntR51, INTR51},
    { CV_IA64_IntR52, INTR52},
    { CV_IA64_IntR53, INTR53},
    { CV_IA64_IntR54, INTR54},
    { CV_IA64_IntR55, INTR55},
    { CV_IA64_IntR56, INTR56},
    { CV_IA64_IntR57, INTR57},
    { CV_IA64_IntR58, INTR58},
    { CV_IA64_IntR59, INTR59},
    { CV_IA64_IntR60, INTR60},
    { CV_IA64_IntR61, INTR61},
    { CV_IA64_IntR62, INTR62},
    { CV_IA64_IntR63, INTR63},
    { CV_IA64_IntR64, INTR64},
    { CV_IA64_IntR65, INTR65},
    { CV_IA64_IntR66, INTR66},
    { CV_IA64_IntR67, INTR67},
    { CV_IA64_IntR68, INTR68},
    { CV_IA64_IntR69, INTR69},
    { CV_IA64_IntR70, INTR70},
    { CV_IA64_IntR71, INTR71},
    { CV_IA64_IntR72, INTR72},
    { CV_IA64_IntR73, INTR73},
    { CV_IA64_IntR74, INTR74},
    { CV_IA64_IntR75, INTR75},
    { CV_IA64_IntR76, INTR76},
    { CV_IA64_IntR77, INTR77},
    { CV_IA64_IntR78, INTR78},
    { CV_IA64_IntR79, INTR79},
    { CV_IA64_IntR80, INTR80},
    { CV_IA64_IntR81, INTR81},
    { CV_IA64_IntR82, INTR82},
    { CV_IA64_IntR83, INTR83},
    { CV_IA64_IntR84, INTR84},
    { CV_IA64_IntR85, INTR85},
    { CV_IA64_IntR86, INTR86},
    { CV_IA64_IntR87, INTR87},
    { CV_IA64_IntR88, INTR88},
    { CV_IA64_IntR89, INTR89},
    { CV_IA64_IntR90, INTR90},
    { CV_IA64_IntR91, INTR91},
    { CV_IA64_IntR92, INTR92},
    { CV_IA64_IntR93, INTR93},
    { CV_IA64_IntR94, INTR94},
    { CV_IA64_IntR95, INTR95},
    { CV_IA64_IntR96, INTR96},
    { CV_IA64_IntR97, INTR97},
    { CV_IA64_IntR98, INTR98},
    { CV_IA64_IntR99, INTR99},
    { CV_IA64_IntR100, INTR100},
    { CV_IA64_IntR101, INTR101},
    { CV_IA64_IntR102, INTR102},
    { CV_IA64_IntR103, INTR103},
    { CV_IA64_IntR104, INTR104},
    { CV_IA64_IntR105, INTR105},
    { CV_IA64_IntR106, INTR106},
    { CV_IA64_IntR107, INTR107},
    { CV_IA64_IntR108, INTR108},
    { CV_IA64_IntR109, INTR109},
    { CV_IA64_IntR110, INTR110},
    { CV_IA64_IntR111, INTR111},
    { CV_IA64_IntR112, INTR112},
    { CV_IA64_IntR113, INTR113},
    { CV_IA64_IntR114, INTR114},
    { CV_IA64_IntR115, INTR115},
    { CV_IA64_IntR116, INTR116},
    { CV_IA64_IntR117, INTR117},
    { CV_IA64_IntR118, INTR118},
    { CV_IA64_IntR119, INTR119},
    { CV_IA64_IntR120, INTR120},
    { CV_IA64_IntR121, INTR121},
    { CV_IA64_IntR122, INTR122},
    { CV_IA64_IntR123, INTR123},
    { CV_IA64_IntR124, INTR124},
    { CV_IA64_IntR125, INTR125},
    { CV_IA64_IntR126, INTR126},
    { CV_IA64_IntR127, INTR127},

    // Floating-Point Registers

    // Low Floating Point Registers
//    { CV_IA64_FltF0, FltZero},
//    { CV_IA64_FltF1, FltOne},
    { CV_IA64_FltF2, FLTS0},
    { CV_IA64_FltF3, FLTS1},
    { CV_IA64_FltF4, FLTS2},
    { CV_IA64_FltF5, FLTS3},
    { CV_IA64_FltF6, FLTT0},
    { CV_IA64_FltF7, FLTT1},
    { CV_IA64_FltF8, FLTT2},
    { CV_IA64_FltF9, FLTT3},
    { CV_IA64_FltF10, FLTT4},
    { CV_IA64_FltF11, FLTT5},
    { CV_IA64_FltF12, FLTT6},
    { CV_IA64_FltF13, FLTT7},
    { CV_IA64_FltF14, FLTT8},
    { CV_IA64_FltF15, FLTT9},
    { CV_IA64_FltF16, FLTS4},
    { CV_IA64_FltF17, FLTS5},
    { CV_IA64_FltF18, FLTS6},
    { CV_IA64_FltF19, FLTS7},
    { CV_IA64_FltF20, FLTS8},
    { CV_IA64_FltF21, FLTS9},
    { CV_IA64_FltF22, FLTS10},
    { CV_IA64_FltF23, FLTS11},
    { CV_IA64_FltF24, FLTS12},
    { CV_IA64_FltF25, FLTS13},
    { CV_IA64_FltF26, FLTS14},
    { CV_IA64_FltF27, FLTS15},
    { CV_IA64_FltF28, FLTS16},
    { CV_IA64_FltF29, FLTS17},
    { CV_IA64_FltF30, FLTS18},
    { CV_IA64_FltF31, FLTS19},

    // High Floating POINT REGISters
    { CV_IA64_FltF32, FLTF32},
    { CV_IA64_FltF33, FLTF33},
    { CV_IA64_FltF34, FLTF34},
    { CV_IA64_FltF35, FLTF35},
    { CV_IA64_FltF36, FLTF36},
    { CV_IA64_FltF37, FLTF37},
    { CV_IA64_FltF38, FLTF38},
    { CV_IA64_FltF39, FLTF39},
    { CV_IA64_FltF40, FLTF40},
    { CV_IA64_FltF41, FLTF41},
    { CV_IA64_FltF42, FLTF42},
    { CV_IA64_FltF43, FLTF43},
    { CV_IA64_FltF44, FLTF44},
    { CV_IA64_FltF45, FLTF45},
    { CV_IA64_FltF46, FLTF46},
    { CV_IA64_FltF47, FLTF47},
    { CV_IA64_FltF48, FLTF48},
    { CV_IA64_FltF49, FLTF49},
    { CV_IA64_FltF50, FLTF50},
    { CV_IA64_FltF51, FLTF51},
    { CV_IA64_FltF52, FLTF52},
    { CV_IA64_FltF53, FLTF53},
    { CV_IA64_FltF54, FLTF54},
    { CV_IA64_FltF55, FLTF55},
    { CV_IA64_FltF56, FLTF56},
    { CV_IA64_FltF57, FLTF57},
    { CV_IA64_FltF58, FLTF58},
    { CV_IA64_FltF59, FLTF59},
    { CV_IA64_FltF60, FLTF60},
    { CV_IA64_FltF61, FLTF61},
    { CV_IA64_FltF62, FLTF62},
    { CV_IA64_FltF63, FLTF63},
    { CV_IA64_FltF64, FLTF64},
    { CV_IA64_FltF65, FLTF65},
    { CV_IA64_FltF66, FLTF66},
    { CV_IA64_FltF67, FLTF67},
    { CV_IA64_FltF68, FLTF68},
    { CV_IA64_FltF69, FLTF69},
    { CV_IA64_FltF70, FLTF70},
    { CV_IA64_FltF71, FLTF71},
    { CV_IA64_FltF72, FLTF72},
    { CV_IA64_FltF73, FLTF73},
    { CV_IA64_FltF74, FLTF74},
    { CV_IA64_FltF75, FLTF75},
    { CV_IA64_FltF76, FLTF76},
    { CV_IA64_FltF77, FLTF77},
    { CV_IA64_FltF78, FLTF78},
    { CV_IA64_FltF79, FLTF79},
    { CV_IA64_FltF80, FLTF80},
    { CV_IA64_FltF81, FLTF81},
    { CV_IA64_FltF82, FLTF82},
    { CV_IA64_FltF83, FLTF83},
    { CV_IA64_FltF84, FLTF84},
    { CV_IA64_FltF85, FLTF85},
    { CV_IA64_FltF86, FLTF86},
    { CV_IA64_FltF87, FLTF87},
    { CV_IA64_FltF88, FLTF88},
    { CV_IA64_FltF89, FLTF89},
    { CV_IA64_FltF90, FLTF90},
    { CV_IA64_FltF91, FLTF91},
    { CV_IA64_FltF92, FLTF92},
    { CV_IA64_FltF93, FLTF93},
    { CV_IA64_FltF94, FLTF94},
    { CV_IA64_FltF95, FLTF95},
    { CV_IA64_FltF96, FLTF96},
    { CV_IA64_FltF97, FLTF97},
    { CV_IA64_FltF98, FLTF98},
    { CV_IA64_FltF99, FLTF99},
    { CV_IA64_FltF100, FLTF100},
    { CV_IA64_FltF101, FLTF101},
    { CV_IA64_FltF102, FLTF102},
    { CV_IA64_FltF103, FLTF103},
    { CV_IA64_FltF104, FLTF104},
    { CV_IA64_FltF105, FLTF105},
    { CV_IA64_FltF106, FLTF106},
    { CV_IA64_FltF107, FLTF107},
    { CV_IA64_FltF108, FLTF108},
    { CV_IA64_FltF109, FLTF109},
    { CV_IA64_FltF110, FLTF110},
    { CV_IA64_FltF111, FLTF111},
    { CV_IA64_FltF112, FLTF112},
    { CV_IA64_FltF113, FLTF113},
    { CV_IA64_FltF114, FLTF114},
    { CV_IA64_FltF115, FLTF115},
    { CV_IA64_FltF116, FLTF116},
    { CV_IA64_FltF117, FLTF117},
    { CV_IA64_FltF118, FLTF118},
    { CV_IA64_FltF119, FLTF119},
    { CV_IA64_FltF120, FLTF120},
    { CV_IA64_FltF121, FLTF121},
    { CV_IA64_FltF122, FLTF122},
    { CV_IA64_FltF123, FLTF123},
    { CV_IA64_FltF124, FLTF124},
    { CV_IA64_FltF125, FLTF125},
    { CV_IA64_FltF126, FLTF126},
    { CV_IA64_FltF127, FLTF127},

    // Application Registers

    { CV_IA64_ApKR0, APKR0},
    { CV_IA64_ApKR1, APKR1},
    { CV_IA64_ApKR2, APKR2},
    { CV_IA64_ApKR3, APKR3},
    { CV_IA64_ApKR4, APKR4},
    { CV_IA64_ApKR5, APKR5},
    { CV_IA64_ApKR6, APKR6},
    { CV_IA64_ApKR7, APKR7},
/*    { CV_IA64_AR8, AR8},
    { CV_IA64_AR9, AR9},
    { CV_IA64_AR10, AR10},
    { CV_IA64_AR11, AR11},
    { CV_IA64_AR12, AR12},
    { CV_IA64_AR13, AR13},
    { CV_IA64_AR14, AR14},
    { CV_IA64_AR15, AR15},*/
    { CV_IA64_RsRSC, RSRSC},
    { CV_IA64_RsBSP, RSBSP},
    { CV_IA64_RsBSPSTORE, RSBSPSTORE},
    { CV_IA64_RsRNAT, RSRNAT},
//    { CV_IA64_AR20, AR20},
    { CV_IA64_StFCR, StFCR},
//    { CV_IA64_AR22, AR22},
//    { CV_IA64_AR23, AR23},
    { CV_IA64_EFLAG, Eflag},
    { CV_IA64_CSD, SegCSD},
    { CV_IA64_SSD, SegSSD},
    { CV_IA64_CFLG, Cflag},
    { CV_IA64_StFSR, STFSR},
    { CV_IA64_StFIR, STFIR},
    { CV_IA64_StFDR, STFDR},
//    { CV_IA64_AR31, AR31},
    { CV_IA64_ApCCV, APCCV},
//    { CV_IA64_AR33, AR33},
//    { CV_IA64_AR34, AR34},
//    { CV_IA64_AR35, AR35},
    { CV_IA64_ApUNAT, APUNAT},
//    { CV_IA64_AR37, AR37},
//    { CV_IA64_AR38, AR38},
//    { CV_IA64_AR39, AR39},
    { CV_IA64_StFPSR, STFPSR},
//    { CV_IA64_AR41, AR41},
//    { CV_IA64_AR42, AR42},
//    { CV_IA64_AR43, AR43},
    { CV_IA64_ApITC, APITC},
/*    { CV_IA64_AR45, AR45},
    { CV_IA64_AR46, AR46},
    { CV_IA64_AR47, AR47},
    { CV_IA64_AR48, AR48},
    { CV_IA64_AR49, AR49},
    { CV_IA64_AR50, AR50},
    { CV_IA64_AR51, AR51},
    { CV_IA64_AR52, AR52},
    { CV_IA64_AR53, AR53},
    { CV_IA64_AR54, AR54},
    { CV_IA64_AR55, AR55},
    { CV_IA64_AR56, AR56},
    { CV_IA64_AR57, AR57},
    { CV_IA64_AR58, AR58},
    { CV_IA64_AR59, AR59},
    { CV_IA64_AR60, AR60},
    { CV_IA64_AR61, AR61},
    { CV_IA64_AR62, AR62},
    { CV_IA64_AR63, AR63},*/
    { CV_IA64_RsPFS, RSPFS},
    { CV_IA64_ApLC, APLC},
    { CV_IA64_ApEC, APEC},
/*    { CV_IA64_AR67, AR67},
    { CV_IA64_AR68, AR68},
    { CV_IA64_AR69, AR69},
    { CV_IA64_AR70, AR70},
    { CV_IA64_AR71, AR71},
    { CV_IA64_AR72, AR72},
    { CV_IA64_AR73, AR73},
    { CV_IA64_AR74, AR74},
    { CV_IA64_AR75, AR75},
    { CV_IA64_AR76, AR76},
    { CV_IA64_AR77, AR77},
    { CV_IA64_AR78, AR78},
    { CV_IA64_AR79, AR79},
    { CV_IA64_AR80, AR80},
    { CV_IA64_AR81, AR81},
    { CV_IA64_AR82, AR82},
    { CV_IA64_AR83, AR83},
    { CV_IA64_AR84, AR84},
    { CV_IA64_AR85, AR85},
    { CV_IA64_AR86, AR86},
    { CV_IA64_AR87, AR87},
    { CV_IA64_AR88, AR88},
    { CV_IA64_AR89, AR89},
    { CV_IA64_AR90, AR90},
    { CV_IA64_AR91, AR91},
    { CV_IA64_AR92, AR92},
    { CV_IA64_AR93, AR93},
    { CV_IA64_AR94, AR94},
    { CV_IA64_AR95, AR95},
    { CV_IA64_AR96, AR96},
    { CV_IA64_AR97, AR97},
    { CV_IA64_AR98, AR98},
    { CV_IA64_AR99, AR99},
    { CV_IA64_AR100, AR100},
    { CV_IA64_AR101, AR101},
    { CV_IA64_AR102, AR102},
    { CV_IA64_AR103, AR103},
    { CV_IA64_AR104, AR104},
    { CV_IA64_AR105, AR105},
    { CV_IA64_AR106, AR106},
    { CV_IA64_AR107, AR107},
    { CV_IA64_AR108, AR108},
    { CV_IA64_AR109, AR109},
    { CV_IA64_AR110, AR110},
    { CV_IA64_AR111, AR111},
    { CV_IA64_AR112, AR112},
    { CV_IA64_AR113, AR113},
    { CV_IA64_AR114, AR114},
    { CV_IA64_AR115, AR115},
    { CV_IA64_AR116, AR116},
    { CV_IA64_AR117, AR117},
    { CV_IA64_AR118, AR118},
    { CV_IA64_AR119, AR119},
    { CV_IA64_AR120, AR120},
    { CV_IA64_AR121, AR121},
    { CV_IA64_AR122, AR122},
    { CV_IA64_AR123, AR123},
    { CV_IA64_AR124, AR124},
    { CV_IA64_AR125, AR125},
    { CV_IA64_AR126, AR126},
    { CV_IA64_AR127, AR127},
*/
    // Control RegisteRS

    { CV_IA64_ApDCR, APDCR},
    { CV_IA64_ApITM, APITM},
    { CV_IA64_ApIVA, APIVA},
//    { CV_IA64_CR3, CR3},
//    { CV_IA64_CR4, CR4},
//    { CV_IA64_CR5, CR5},
//    { CV_IA64_CR6, CR6},
//    { CV_IA64_CR7, CR7},
    { CV_IA64_ApPTA, APPTA},
//    { CV_IA64_CR9, CR9},
//    { CV_IA64_CR10, CR10},
//    { CV_IA64_CR11, CR11},
//    { CV_IA64_CR12, CR12},
//    { CV_IA64_CR13, CR13},
//    { CV_IA64_CR14, CR14},
//    { CV_IA64_CR15, CR15},
    { CV_IA64_StIPSR, STIPSR},
    { CV_IA64_StISR, STISR},
    { CV_IA64_CR18,  STIDA},
    { CV_IA64_StIIP, STIIP},
//    { CV_IA64_StIDTR, STIDTR},
    { CV_IA64_StIFA, STIITR},
    { CV_IA64_StIIPA, STIIPA},
    { CV_IA64_StIFS, STIFS},
    { CV_IA64_StIIM, STIIM},
    { CV_IA64_StIHA, STIHA},
/*    { CV_IA64_CR26, CR26},
    { CV_IA64_CR27, CR27},
    { CV_IA64_CR28, CR28},
    { CV_IA64_CR29, CR29},
    { CV_IA64_CR30, CR30},
    { CV_IA64_CR31, CR31},
    { CV_IA64_CR32, CR32},
    { CV_IA64_CR33, CR33},
    { CV_IA64_CR34, CR34},
    { CV_IA64_CR35, CR35},
    { CV_IA64_CR36, CR36},
    { CV_IA64_CR37, CR37},
    { CV_IA64_CR38, CR38},
    { CV_IA64_CR39, CR39},
    { CV_IA64_CR40, CR40},
    { CV_IA64_CR41, CR41},
    { CV_IA64_CR42, CR42},
    { CV_IA64_CR43, CR43},
    { CV_IA64_CR44, CR44},
    { CV_IA64_CR45, CR45},
    { CV_IA64_CR46, CR46},
    { CV_IA64_CR47, CR47},
    { CV_IA64_CR48, CR48},
    { CV_IA64_CR49, CR49},
    { CV_IA64_CR50, CR50},
    { CV_IA64_CR51, CR51},
    { CV_IA64_CR52, CR52},
    { CV_IA64_CR53, CR53},
    { CV_IA64_CR54, CR54},
    { CV_IA64_CR55, CR55},
    { CV_IA64_CR56, CR56},
    { CV_IA64_CR57, CR57},
    { CV_IA64_CR58, CR58},
    { CV_IA64_CR59, CR59},
    { CV_IA64_CR60, CR60},
    { CV_IA64_CR61, CR61},
    { CV_IA64_CR62, CR62},
    { CV_IA64_CR63, CR63},
    { CV_IA64_CR64, CR64},
    { CV_IA64_CR65, CR65},*/
    { CV_IA64_SaLID, SALID},
//    { CV_IA64_CR67, CR67},
//    { CV_IA64_CR68, CR68},
//    { CV_IA64_CR69, CR69},
//    { CV_IA64_CR70, CR70},
    { CV_IA64_SaIVR, SAIVR},
    { CV_IA64_SaTPR, SATPR},
//    { CV_IA64_CR73, CR73},
//    { CV_IA64_CR74, CR74},
    { CV_IA64_SaEOI, SAEOI},
/*    { CV_IA64_CR76, CR76},
    { CV_IA64_CR77, CR77},
    { CV_IA64_CR78, CR78},
    { CV_IA64_CR79, CR79},
    { CV_IA64_CR80, CR80},
    { CV_IA64_CR81, CR81},
    { CV_IA64_CR82, CR82},
    { CV_IA64_CR83, CR83},
    { CV_IA64_CR84, CR84},
    { CV_IA64_CR85, CR85},
    { CV_IA64_CR86, CR86},
    { CV_IA64_CR87, CR87},
    { CV_IA64_CR88, CR88},
    { CV_IA64_CR89, CR89},
    { CV_IA64_CR90, CR90},
    { CV_IA64_CR91, CR91},
    { CV_IA64_CR92, CR92},
    { CV_IA64_CR93, CR93},
    { CV_IA64_CR94, CR94},
    { CV_IA64_CR95, CR95},*/
    { CV_IA64_SaIRR0, SAIRR0},
//    { CV_IA64_CR97, CR97},
    { CV_IA64_SaIRR1, SAIRR1},
//    { CV_IA64_CR99, CR99},
    { CV_IA64_SaIRR2, SAIRR2},
//    { CV_IA64_CR101, CR101},
    { CV_IA64_SaIRR3, SAIRR3},
/*    { CV_IA64_CR103, CR103},
    { CV_IA64_CR104, CR104},
    { CV_IA64_CR105, CR105},
    { CV_IA64_CR106, CR106},
    { CV_IA64_CR107, CR107},
    { CV_IA64_CR108, CR108},
    { CV_IA64_CR109, CR109},
    { CV_IA64_CR110, CR110},
    { CV_IA64_CR111, CR111},
    { CV_IA64_CR112, CR112},
    { CV_IA64_CR113, CR113},*/
    { CV_IA64_SaITV, SAITV},
//    { CV_IA64_CR115, CR115},
    { CV_IA64_SaPMV, SAPMV},
    { CV_IA64_SaLRR0, SALRR0},
    { CV_IA64_SaLRR1, SALRR1},
    { CV_IA64_SaCMCV, SACMCV},
//    { CV_IA64_CR120, CR120},
//    { CV_IA64_CR121, CR121},
//    { CV_IA64_CR122, CR122},
//    { CV_IA64_CR123, CR123},
//    { CV_IA64_CR124, CR124},
//    { CV_IA64_CR125, CR125},
//    { CV_IA64_CR126, CR126},
//    { CV_IA64_CR127, CR127},

    // Protection Key Registers

    { CV_IA64_Pkr0, SRPKR0},
    { CV_IA64_Pkr1, SRPKR1},
    { CV_IA64_Pkr2, SRPKR2},
    { CV_IA64_Pkr3, SRPKR3},
    { CV_IA64_Pkr4, SRPKR4},
    { CV_IA64_Pkr5, SRPKR5},
    { CV_IA64_Pkr6, SRPKR6},
    { CV_IA64_Pkr7, SRPKR7},
    { CV_IA64_Pkr8, SRPKR8},
    { CV_IA64_Pkr9, SRPKR9},
    { CV_IA64_Pkr10, SRPKR10},
    { CV_IA64_Pkr11, SRPKR11},
    { CV_IA64_Pkr12, SRPKR12},
    { CV_IA64_Pkr13, SRPKR13},
    { CV_IA64_Pkr14, SRPKR14},
    { CV_IA64_Pkr15, SRPKR15},

    // REGION REGISTERS

    { CV_IA64_Rr0, SRRR0},
    { CV_IA64_Rr1, SRRR1},
    { CV_IA64_Rr2, SRRR2},
    { CV_IA64_Rr3, SRRR3},
    { CV_IA64_Rr4, SRRR4},
    { CV_IA64_Rr5, SRRR5},
    { CV_IA64_Rr6, SRRR6},
    { CV_IA64_Rr7, SRRR7},

    // PERFORMANCE MONITOR DATA REGISTERS

    { CV_IA64_PFD0, KRPFD0},
    { CV_IA64_PFD1, KRPFD1},
    { CV_IA64_PFD2, KRPFD2},
    { CV_IA64_PFD3, KRPFD3},
    { CV_IA64_PFD4, KRPFD4},
    { CV_IA64_PFD5, KRPFD5},
    { CV_IA64_PFD6, KRPFD6},
    { CV_IA64_PFD7, KRPFD7},

    // PERFORMANCE MONITOR CONFIG REGISTERS

    { CV_IA64_PFC0, KRPFC0},
    { CV_IA64_PFC1, KRPFC1},
    { CV_IA64_PFC2, KRPFC2},
    { CV_IA64_PFC3, KRPFC3},
    { CV_IA64_PFC4, KRPFC4},
    { CV_IA64_PFC5, KRPFC5},
    { CV_IA64_PFC6, KRPFC6},
    { CV_IA64_PFC7, KRPFC7},

    // INSTRUCTION TRANSLATION REGISTERS

    { CV_IA64_TrI0, SRTRI0},
    { CV_IA64_TrI1, SRTRI1},
    { CV_IA64_TrI2, SRTRI2},
    { CV_IA64_TrI3, SRTRI3},
    { CV_IA64_TrI4, SRTRI4},
    { CV_IA64_TrI5, SRTRI5},
    { CV_IA64_TrI6, SRTRI6},
    { CV_IA64_TrI7, SRTRI7},

    // DATA TRANSLATION REGISTERS

    { CV_IA64_TrD0, SRTRD0},
    { CV_IA64_TrD1, SRTRD1},
    { CV_IA64_TrD2, SRTRD2},
    { CV_IA64_TrD3, SRTRD3},
    { CV_IA64_TrD4, SRTRD4},
    { CV_IA64_TrD5, SRTRD5},
    { CV_IA64_TrD6, SRTRD6},
    { CV_IA64_TrD7, SRTRD7},

    // INSTRUCTION BREAKPOINT REGISTERS

    { CV_IA64_DbI0, KRDBI0},
    { CV_IA64_DbI1, KRDBI1},
    { CV_IA64_DbI2, KRDBI2},
    { CV_IA64_DbI3, KRDBI3},
    { CV_IA64_DbI4, KRDBI4},
    { CV_IA64_DbI5, KRDBI5},
    { CV_IA64_DbI6, KRDBI6},
    { CV_IA64_DbI7, KRDBI7},

    // DATA BREAKPOINT REGISTERS

    { CV_IA64_DbD0, KRDBD0},
    { CV_IA64_DbD1, KRDBD1},
    { CV_IA64_DbD2, KRDBD2},
    { CV_IA64_DbD3, KRDBD3},
    { CV_IA64_DbD4, KRDBD4},
    { CV_IA64_DbD5, KRDBD5},
    { CV_IA64_DbD6, KRDBD6},
    { CV_IA64_DbD7, KRDBD7},
};

REGISTER_LOOKUP gRegLookupAlpha[] = {

    {CV_ALPHA_FltF0, ALPHA_F0},
    {CV_ALPHA_FltF1, ALPHA_F1},
    {CV_ALPHA_FltF2, ALPHA_F2},
    {CV_ALPHA_FltF3, ALPHA_F3},
    {CV_ALPHA_FltF4, ALPHA_F4},
    {CV_ALPHA_FltF5, ALPHA_F5},
    {CV_ALPHA_FltF6, ALPHA_F6},
    {CV_ALPHA_FltF7, ALPHA_F7},
    {CV_ALPHA_FltF8, ALPHA_F8},
    {CV_ALPHA_FltF9, ALPHA_F9},
    {CV_ALPHA_FltF10, ALPHA_F10},
    {CV_ALPHA_FltF11, ALPHA_F11},
    {CV_ALPHA_FltF12, ALPHA_F12},
    {CV_ALPHA_FltF13, ALPHA_F13},
    {CV_ALPHA_FltF14, ALPHA_F14},
    {CV_ALPHA_FltF15, ALPHA_F15},
    {CV_ALPHA_FltF16, ALPHA_F16},
    {CV_ALPHA_FltF17, ALPHA_F17},
    {CV_ALPHA_FltF18, ALPHA_F18},
    {CV_ALPHA_FltF19, ALPHA_F19},
    {CV_ALPHA_FltF20, ALPHA_F20},
    {CV_ALPHA_FltF21, ALPHA_F21},
    {CV_ALPHA_FltF22, ALPHA_F22},
    {CV_ALPHA_FltF23, ALPHA_F23},
    {CV_ALPHA_FltF24, ALPHA_F24},
    {CV_ALPHA_FltF25, ALPHA_F25},
    {CV_ALPHA_FltF26, ALPHA_F26},
    {CV_ALPHA_FltF27, ALPHA_F27},
    {CV_ALPHA_FltF28, ALPHA_F28},
    {CV_ALPHA_FltF29, ALPHA_F29},
    {CV_ALPHA_FltF30, ALPHA_F30},
    {CV_ALPHA_FltF31, ALPHA_F31},

    {CV_ALPHA_IntV0, ALPHA_V0},
    {CV_ALPHA_IntT0, ALPHA_T0},
    {CV_ALPHA_IntT1, ALPHA_T1},
    {CV_ALPHA_IntT2, ALPHA_T2},
    {CV_ALPHA_IntT3, ALPHA_T3},
    {CV_ALPHA_IntT4, ALPHA_T4},
    {CV_ALPHA_IntT5, ALPHA_T5},
    {CV_ALPHA_IntT6, ALPHA_T6},
    {CV_ALPHA_IntT7, ALPHA_T7},
    {CV_ALPHA_IntS0, ALPHA_S0},
    {CV_ALPHA_IntS1, ALPHA_S1},
    {CV_ALPHA_IntS2, ALPHA_S2},
    {CV_ALPHA_IntS3, ALPHA_S3},
    {CV_ALPHA_IntS4, ALPHA_S4},
    {CV_ALPHA_IntS5, ALPHA_S5},
    {CV_ALPHA_IntFP, ALPHA_FP},
    {CV_ALPHA_IntA0, ALPHA_A0},
    {CV_ALPHA_IntA1, ALPHA_A1},
    {CV_ALPHA_IntA2, ALPHA_A2},
    {CV_ALPHA_IntA3, ALPHA_A3},
    {CV_ALPHA_IntA4, ALPHA_A4},
    {CV_ALPHA_IntA5, ALPHA_A5},
    {CV_ALPHA_IntT8, ALPHA_T8},
    {CV_ALPHA_IntT9, ALPHA_T9},
    {CV_ALPHA_IntT10, ALPHA_T10},
    {CV_ALPHA_IntT11, ALPHA_T11},
    {CV_ALPHA_IntRA, ALPHA_RA},
    {CV_ALPHA_IntT12, ALPHA_T12},
    {CV_ALPHA_IntAT, ALPHA_AT},
    {CV_ALPHA_IntGP, ALPHA_GP},
    {CV_ALPHA_IntSP, ALPHA_SP},
    {CV_ALPHA_IntZERO, ALPHA_ZERO},


    {CV_ALPHA_Fpcr, ALPHA_FPCR},
    {CV_ALPHA_Fir, ALPHA_FIR},
    {CV_ALPHA_Psr, ALPHA_PSR},
//    {CV_ALPHA_FltFsr, REGFSR},
    {CV_ALPHA_SoftFpcr, ALPHA_SFTFPCR},
};




BOOL
LookupRegID (
    IN ULONG CVReg, 
    IN ULONG MachineType,
    OUT PULONG pDbgReg)
{
    ULONG low, high, mid, Max;
    BOOL Found=FALSE;
    PREGISTER_LOOKUP ToLookup=&gRegLookupX86[0];

    if (MachineType == IMAGE_FILE_MACHINE_I386) {
        Max = sizeof (gRegLookupX86) / sizeof(REGISTER_LOOKUP);
        ToLookup = &gRegLookupX86[0];
    } else if (MachineType == IMAGE_FILE_MACHINE_IA64) {
        Max = sizeof (gRegLookupIa64) / sizeof(REGISTER_LOOKUP);
        ToLookup = &gRegLookupIa64[0];
    } else if (MachineType == IMAGE_FILE_MACHINE_AXP64 ||
               MachineType == IMAGE_FILE_MACHINE_ALPHA) {
        Max = sizeof (gRegLookupAlpha) / sizeof(REGISTER_LOOKUP);
        ToLookup = &gRegLookupAlpha[0];
    } else {
        return FALSE;
    }

    low = 0; high=Max;
    while (low <= high && !Found) { 
        mid = (low + high)/2;
        if (ToLookup[mid].CVReg == CVReg) {
            *pDbgReg = ToLookup[mid].DbgReg;
            Found = TRUE;
        } else if (ToLookup[mid].CVReg < CVReg) {
            low = mid+1;
        } else {
            high = mid-1;
        }
    }
    return Found;
}
