nctref/src/x86/arch.c

63 lines
1.7 KiB
C

#include"arch.h"
RegisterClass REG_CLASSES[] = {
[REG_CLASS_8] = {
.rMask = HWR_GPR, .w = 1, .p = 8,
.rs = {HWR_AL, HWR_AH, HWR_BL, HWR_BH, HWR_CL, HWR_CH, HWR_DL, HWR_DH},
.rsN = {"al", "ah", "bl", "bh", "cl", "ch", "dl", "dh"},
.rsS = {1, 1, 1, 1, 1, 1, 1, 1},
},
[REG_CLASS_NOT_8] = {
.rMask = HWR_GPR, .w = 2, .p = 4,
.rs = {HWR_AX, HWR_EAX, HWR_BX, HWR_EBX, HWR_CX, HWR_ECX, HWR_DX, HWR_EDX, HWR_DI, HWR_EDI, HWR_SI, HWR_ESI, HWR_BP, HWR_EBP},
.rsN = {"ax", "eax", "bx", "ebx", "cx", "ecx", "dx", "edx", "di", "edi", "si", "esi", "bp", "ebp"},
.rsS = {2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4},
},
[REG_CLASS_16_32] = {
.rMask = HWR_GPR, .w = 2, .p = 4,
.rs = {HWR_AX, HWR_EAX, HWR_BX, HWR_EBX, HWR_CX, HWR_ECX, HWR_DX, HWR_EDX, HWR_BP, HWR_EBP},
.rsN = {"ax", "eax", "bx", "ebx", "cx", "ecx", "dx", "edx", "bp", "ebp"},
.rsS = {2, 4, 2, 4, 2, 4, 2, 4, 2, 4},
},
[REG_CLASS_IND] = {
.rMask = HWR_IND, .w = 2, .p = 2,
.rs = {HWR_DI, HWR_EDI, HWR_SI, HWR_ESI},
.rsN = {"di", "edi", "si", "esi"},
.rsS = {2, 4, 2, 4},
},
[REG_CLASS_IA16_PTRS] = {
.rMask = HWR_IND | HWR_BX,
.rs = {HWR_DI, HWR_SI, HWR_BX},
.rsN = {"di", "si", "bx"},
.rsS = {2, 2, 2},
},
[REG_CLASS_IA16_USEABLE]= {
.rMask = HWR_IND | HWR_GPR,
.rs = {HWR_AX, HWR_CX, HWR_DX, HWR_DI, HWR_SI, HWR_BX},
.rsN = {"ax", "cx", "dx", "di", "si", "bx"},
.rsS = {2, 2, 2, 2, 2, 2},
},
[REG_CLASS_DATASEGS] = {
.rMask = HWR_SEGREGS,
.rs = {HWR_DS, HWR_ES, HWR_FS, HWR_GS},
.rsN = {"ds", "es", "fs", "gs"},
.rsS = {2, 2, 2, 2},
},
};
bool arch_verify_target() {
if(x86_target() == IUNKNOWN86) {
return false;
}
return true;
}
int arch_ptr_size() {
return x86_ia16() ? 2 : 4;
}
void arch_init() {
}