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

Merge pull request #856 from lioncash/vfp

vfp: Implement VMOVBCR/VMOVBRC
bunnei 11 лет назад
Родитель
Сommit
2a435aa0cc
2 измененных файлов с 8 добавлено и 5 удалено
  1. 0 1
      src/core/arm/skyeye_common/vfp/vfp.h
  2. 8 4
      src/core/arm/skyeye_common/vfp/vfpinstr.cpp

+ 0 - 1
src/core/arm/skyeye_common/vfp/vfp.h

@@ -22,7 +22,6 @@
 
 
 #include "core/arm/skyeye_common/vfp/vfp_helper.h" /* for references to cdp SoftFloat functions */
 #include "core/arm/skyeye_common/vfp/vfp_helper.h" /* for references to cdp SoftFloat functions */
 
 
-#define VFP_DEBUG_UNIMPLEMENTED(x) LOG_ERROR(Core_ARM11, "in func %s, " #x " unimplemented\n", __FUNCTION__); exit(-1);
 #define VFP_DEBUG_UNTESTED(x) LOG_TRACE(Core_ARM11, "in func %s, " #x " untested\n", __FUNCTION__);
 #define VFP_DEBUG_UNTESTED(x) LOG_TRACE(Core_ARM11, "in func %s, " #x " untested\n", __FUNCTION__);
 #define CHECK_VFP_ENABLED
 #define CHECK_VFP_ENABLED
 #define CHECK_VFP_CDP_RET vfp_raise_exceptions(cpu, ret, inst_cream->instr, cpu->VFP[VFP_FPSCR]);
 #define CHECK_VFP_CDP_RET vfp_raise_exceptions(cpu, ret, inst_cream->instr, cpu->VFP[VFP_FPSCR]);

+ 8 - 4
src/core/arm/skyeye_common/vfp/vfpinstr.cpp

@@ -1068,10 +1068,12 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbrc)(unsigned int inst, int index)
 #ifdef VFP_INTERPRETER_IMPL
 #ifdef VFP_INTERPRETER_IMPL
 VMOVBRC_INST:
 VMOVBRC_INST:
 {
 {
-    if ((inst_base->cond == 0xe) || CondPassed(cpu, inst_base->cond)) {
+    if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
         CHECK_VFP_ENABLED;
         CHECK_VFP_ENABLED;
 
 
-        VFP_DEBUG_UNIMPLEMENTED(VMOVBRC);
+        vmovbrc_inst* const inst_cream = (vmovbrc_inst*)inst_base->component;
+
+        cpu->ExtReg[(2 * inst_cream->d) + inst_cream->index] = cpu->Reg[inst_cream->t];
     }
     }
     cpu->Reg[15] += GET_INST_SIZE(cpu);
     cpu->Reg[15] += GET_INST_SIZE(cpu);
     INC_PC(sizeof(vmovbrc_inst));
     INC_PC(sizeof(vmovbrc_inst));
@@ -1195,10 +1197,12 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(vmovbcr)(unsigned int inst, int index)
 #ifdef VFP_INTERPRETER_IMPL
 #ifdef VFP_INTERPRETER_IMPL
 VMOVBCR_INST:
 VMOVBCR_INST:
 {
 {
-    if ((inst_base->cond == 0xe) || CondPassed(cpu, inst_base->cond)) {
+    if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
         CHECK_VFP_ENABLED;
         CHECK_VFP_ENABLED;
 
 
-        VFP_DEBUG_UNIMPLEMENTED(VMOVBCR);
+        vmovbcr_inst* const inst_cream = (vmovbcr_inst*) inst_base->component;
+
+        cpu->Reg[inst_cream->t] = cpu->ExtReg[(2 * inst_cream->d) + inst_cream->index];
     }
     }
     cpu->Reg[15] += GET_INST_SIZE(cpu);
     cpu->Reg[15] += GET_INST_SIZE(cpu);
     INC_PC(sizeof(vmovbcr_inst));
     INC_PC(sizeof(vmovbcr_inst));