Просмотр исходного кода

arm_interface: Implement interface for retrieving VFP registers

Lioncash 11 лет назад
Родитель
Сommit
3b457a5876

+ 28 - 0
src/core/arm/arm_interface.h

@@ -61,6 +61,34 @@ public:
      */
     virtual void SetReg(int index, u32 value) = 0;
 
+    /**
+     * Gets the value of a VFP register
+     * @param index Register index (0-31)
+     * @return Returns the value in the register
+     */
+    virtual u32 GetVFPReg(int index) const = 0;
+
+    /**
+     * Sets a VFP register to the given value
+     * @param index Register index (0-31)
+     * @param value Value to set register to
+     */
+    virtual void SetVFPReg(int index, u32 value) = 0;
+
+    /**
+     * Gets the current value within a given VFP system register
+     * @param reg The VFP system register
+     * @return The value within the VFP system register
+     */
+    virtual u32 GetVFPSystemReg(VFPSystemRegister reg) const = 0;
+
+    /**
+     * Sets the VFP system register to the given value
+     * @param reg   The VFP system register
+     * @param value Value to set the VFP system register to
+     */
+    virtual void SetVFPSystemReg(VFPSystemRegister reg, u32 value) = 0;
+
     /**
      * Get the current CPSR register
      * @return Returns the value of the CPSR register

+ 16 - 0
src/core/arm/dyncom/arm_dyncom.cpp

@@ -40,6 +40,22 @@ void ARM_DynCom::SetReg(int index, u32 value) {
     state->Reg[index] = value;
 }
 
+u32 ARM_DynCom::GetVFPReg(int index) const {
+    return state->ExtReg[index];
+}
+
+void ARM_DynCom::SetVFPReg(int index, u32 value) {
+    state->ExtReg[index] = value;
+}
+
+u32 ARM_DynCom::GetVFPSystemReg(VFPSystemRegister reg) const {
+    return state->VFP[reg];
+}
+
+void ARM_DynCom::SetVFPSystemReg(VFPSystemRegister reg, u32 value) {
+    state->VFP[reg] = value;
+}
+
 u32 ARM_DynCom::GetCPSR() const {
     return state->Cpsr;
 }

+ 4 - 0
src/core/arm/dyncom/arm_dyncom.h

@@ -25,6 +25,10 @@ public:
     u32 GetPC() const override;
     u32 GetReg(int index) const override;
     void SetReg(int index, u32 value) override;
+    u32 GetVFPReg(int index) const override;
+    void SetVFPReg(int index, u32 value) override;
+    u32 GetVFPSystemReg(VFPSystemRegister reg) const override;
+    void SetVFPSystemReg(VFPSystemRegister reg, u32 value) override;
     u32 GetCPSR() const override;
     void SetCPSR(u32 cpsr) override;
     u32 GetCP15Register(CP15Register reg) override;

+ 1 - 1
src/core/arm/skyeye_common/arm_regformat.h

@@ -55,7 +55,7 @@ enum {
 };
 
 // VFP system registers
-enum {
+enum VFPSystemRegister {
     VFP_FPSID,
     VFP_FPSCR,
     VFP_FPEXC,