Merge pull request #1722 from TSRBerry/dev
aarch64: Add FPCR and FPSR registers
This commit is contained in:
@@ -318,7 +318,11 @@ module Arm64 =
|
||||
let UC_ARM64_REG_VBAR_EL2 = 288
|
||||
let UC_ARM64_REG_VBAR_EL3 = 289
|
||||
let UC_ARM64_REG_CP_REG = 290
|
||||
let UC_ARM64_REG_ENDING = 291
|
||||
|
||||
// floating point control and status registers
|
||||
let UC_ARM64_REG_FPCR = 291
|
||||
let UC_ARM64_REG_FPSR = 292
|
||||
let UC_ARM64_REG_ENDING = 293
|
||||
|
||||
// alias registers
|
||||
let UC_ARM64_REG_IP0 = 215
|
||||
|
||||
@@ -313,7 +313,11 @@ const (
|
||||
ARM64_REG_VBAR_EL2 = 288
|
||||
ARM64_REG_VBAR_EL3 = 289
|
||||
ARM64_REG_CP_REG = 290
|
||||
ARM64_REG_ENDING = 291
|
||||
|
||||
// floating point control and status registers
|
||||
ARM64_REG_FPCR = 291
|
||||
ARM64_REG_FPSR = 292
|
||||
ARM64_REG_ENDING = 293
|
||||
|
||||
// alias registers
|
||||
ARM64_REG_IP0 = 215
|
||||
|
||||
@@ -315,7 +315,11 @@ public interface Arm64Const {
|
||||
public static final int UC_ARM64_REG_VBAR_EL2 = 288;
|
||||
public static final int UC_ARM64_REG_VBAR_EL3 = 289;
|
||||
public static final int UC_ARM64_REG_CP_REG = 290;
|
||||
public static final int UC_ARM64_REG_ENDING = 291;
|
||||
|
||||
// floating point control and status registers
|
||||
public static final int UC_ARM64_REG_FPCR = 291;
|
||||
public static final int UC_ARM64_REG_FPSR = 292;
|
||||
public static final int UC_ARM64_REG_ENDING = 293;
|
||||
|
||||
// alias registers
|
||||
public static final int UC_ARM64_REG_IP0 = 215;
|
||||
|
||||
@@ -316,7 +316,11 @@ const
|
||||
UC_ARM64_REG_VBAR_EL2 = 288;
|
||||
UC_ARM64_REG_VBAR_EL3 = 289;
|
||||
UC_ARM64_REG_CP_REG = 290;
|
||||
UC_ARM64_REG_ENDING = 291;
|
||||
|
||||
// floating point control and status registers
|
||||
UC_ARM64_REG_FPCR = 291;
|
||||
UC_ARM64_REG_FPSR = 292;
|
||||
UC_ARM64_REG_ENDING = 293;
|
||||
|
||||
// alias registers
|
||||
UC_ARM64_REG_IP0 = 215;
|
||||
|
||||
@@ -311,7 +311,11 @@ UC_ARM64_REG_VBAR_EL1 = 287
|
||||
UC_ARM64_REG_VBAR_EL2 = 288
|
||||
UC_ARM64_REG_VBAR_EL3 = 289
|
||||
UC_ARM64_REG_CP_REG = 290
|
||||
UC_ARM64_REG_ENDING = 291
|
||||
|
||||
# floating point control and status registers
|
||||
UC_ARM64_REG_FPCR = 291
|
||||
UC_ARM64_REG_FPSR = 292
|
||||
UC_ARM64_REG_ENDING = 293
|
||||
|
||||
# alias registers
|
||||
UC_ARM64_REG_IP0 = 215
|
||||
|
||||
@@ -313,7 +313,11 @@ module UnicornEngine
|
||||
UC_ARM64_REG_VBAR_EL2 = 288
|
||||
UC_ARM64_REG_VBAR_EL3 = 289
|
||||
UC_ARM64_REG_CP_REG = 290
|
||||
UC_ARM64_REG_ENDING = 291
|
||||
|
||||
# floating point control and status registers
|
||||
UC_ARM64_REG_FPCR = 291
|
||||
UC_ARM64_REG_FPSR = 292
|
||||
UC_ARM64_REG_ENDING = 293
|
||||
|
||||
# alias registers
|
||||
UC_ARM64_REG_IP0 = 215
|
||||
|
||||
@@ -350,6 +350,10 @@ typedef enum uc_arm64_reg {
|
||||
|
||||
UC_ARM64_REG_CP_REG,
|
||||
|
||||
//> floating point control and status registers
|
||||
UC_ARM64_REG_FPCR,
|
||||
UC_ARM64_REG_FPSR,
|
||||
|
||||
UC_ARM64_REG_ENDING, // <-- mark the end of the list of registers
|
||||
|
||||
//> alias registers
|
||||
|
||||
@@ -225,6 +225,12 @@ static uc_err reg_read(CPUARMState *env, unsigned int regid, void *value)
|
||||
case UC_ARM64_REG_CP_REG:
|
||||
ret = read_cp_reg(env, (uc_arm64_cp_reg *)value);
|
||||
break;
|
||||
case UC_ARM64_REG_FPCR:
|
||||
*(uint32_t *)value = vfp_get_fpcr(env);
|
||||
break;
|
||||
case UC_ARM64_REG_FPSR:
|
||||
*(uint32_t *)value = vfp_get_fpsr(env);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,6 +324,12 @@ static uc_err reg_write(CPUARMState *env, unsigned int regid, const void *value)
|
||||
case UC_ARM64_REG_CP_REG:
|
||||
ret = write_cp_reg(env, (uc_arm64_cp_reg *)value);
|
||||
break;
|
||||
case UC_ARM64_REG_FPCR:
|
||||
vfp_set_fpcr(env, *(uint32_t *)value);
|
||||
break;
|
||||
case UC_ARM64_REG_FPSR:
|
||||
vfp_set_fpsr(env, *(uint32_t *)value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user