refactored registers
This commit is contained in:
@@ -8,29 +8,55 @@
|
||||
vm->current_pos += sizeof(VAR);\
|
||||
}
|
||||
|
||||
#define validateRegisterIndex(VAR) {\
|
||||
if(VAR> sizeof(vm->registers)){\
|
||||
#define validateRegisterCode(VAR) \
|
||||
if(VAR == RegisterCode_Unset || VAR > RegisterCode_dh){\
|
||||
VM_setError(vm, "invalid register index (%x)", VAR);\
|
||||
return -1;\
|
||||
}\
|
||||
}
|
||||
}
|
||||
|
||||
#define readRegisterVar(VAR) {\
|
||||
#define readRegisterCode(VAR) {\
|
||||
readVar(VAR);\
|
||||
VAR -= 1;\
|
||||
validateRegisterIndex(VAR);\
|
||||
validateRegisterCode(VAR);\
|
||||
}
|
||||
|
||||
/*
|
||||
#define validateValueSize(VAR) {\
|
||||
if(VAR < 1 || VAR > 8){\
|
||||
VM_setError(vm, "invalid value_size (%x)", VAR);\
|
||||
return -1;\
|
||||
}\
|
||||
#define OPERATOR_IMPL_1(NAME, OPERATOR)\
|
||||
i32 NAME##_impl (VM* vm) {\
|
||||
RegisterCode dst_reg_code = 0;\
|
||||
readRegisterCode(dst_reg_code);\
|
||||
u64 dst_reg_value = 0;\
|
||||
VM_registerRead(vm, &dst_reg_value, dst_reg_code);\
|
||||
\
|
||||
dst_reg_value = OPERATOR dst_reg_value;\
|
||||
VM_registerWrite(vm, &dst_reg_value, dst_reg_code);\
|
||||
return sizeof(dst_reg_code);\
|
||||
}
|
||||
|
||||
#define readValueSizeVar(VAR) {\
|
||||
readVar(VAR);\
|
||||
validateValueSize(VAR);\
|
||||
#define OPERATOR_IMPL_2(NAME, OPERATOR)\
|
||||
i32 NAME##_impl (VM* vm) {\
|
||||
RegisterCode dst_reg_code = 0, src_reg_code = 0;\
|
||||
readRegisterCode(dst_reg_code);\
|
||||
readRegisterCode(src_reg_code);\
|
||||
u64 dst_reg_value = 0, src_reg_value = 0;\
|
||||
VM_registerRead(vm, &dst_reg_value, dst_reg_code);\
|
||||
VM_registerRead(vm, &src_reg_value, src_reg_code);\
|
||||
\
|
||||
dst_reg_value = dst_reg_value OPERATOR src_reg_value;\
|
||||
VM_registerWrite(vm, &dst_reg_value, dst_reg_code);\
|
||||
return sizeof(dst_reg_code) + sizeof(src_reg_code);\
|
||||
}
|
||||
|
||||
#define OPERATOR_IMPL_3(NAME, OPERATOR)\
|
||||
i32 NAME##_impl (VM* vm) {\
|
||||
RegisterCode dst_reg_code = 0, src0_reg_code = 0, src1_reg_code = 0;\
|
||||
readRegisterCode(dst_reg_code);\
|
||||
readRegisterCode(src0_reg_code);\
|
||||
readRegisterCode(src1_reg_code);\
|
||||
u64 dst_reg_value = 0, src0_reg_value = 0, src1_reg_value = 0;\
|
||||
VM_registerRead(vm, &dst_reg_value, dst_reg_code);\
|
||||
VM_registerRead(vm, &src0_reg_value, src0_reg_code);\
|
||||
VM_registerRead(vm, &src1_reg_value, src1_reg_code);\
|
||||
\
|
||||
dst_reg_value = src0_reg_value OPERATOR src1_reg_value;\
|
||||
VM_registerWrite(vm, &dst_reg_value, dst_reg_code);\
|
||||
return sizeof(dst_reg_code) + sizeof(src0_reg_code) + sizeof(src1_reg_code);\
|
||||
}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user