|
|
@ -46,9 +46,9 @@ VMLA_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -96,9 +96,9 @@ VMLS_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -146,9 +146,9 @@ VNMLA_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -197,9 +197,9 @@ VNMLS_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -247,9 +247,9 @@ VNMUL_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -297,9 +297,9 @@ VMUL_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -347,9 +347,9 @@ VADD_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -397,9 +397,9 @@ VSUB_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -447,9 +447,9 @@ VDIV_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -591,9 +591,9 @@ VABS_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -642,9 +642,9 @@ VNEG_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -692,9 +692,9 @@ VSQRT_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -742,9 +742,9 @@ VCMP_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -792,9 +792,9 @@ VCMP2_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -842,9 +842,9 @@ VCVTBDS_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -894,9 +894,9 @@ VCVTBFF_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -944,9 +944,9 @@ VCVTBFI_INST: |
|
|
int ret; |
|
|
int ret; |
|
|
|
|
|
|
|
|
if (inst_cream->dp_operation) |
|
|
if (inst_cream->dp_operation) |
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_double_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
else |
|
|
else |
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_OFFSET(VFP_FPSCR)]); |
|
|
|
|
|
|
|
|
ret = vfp_single_cpdo(cpu, inst_cream->instr, cpu->VFP[VFP_FPSCR]); |
|
|
|
|
|
|
|
|
CHECK_VFP_CDP_RET; |
|
|
CHECK_VFP_CDP_RET; |
|
|
} |
|
|
} |
|
|
@ -1146,14 +1146,14 @@ VMRS_INST: |
|
|
{ |
|
|
{ |
|
|
if (inst_cream->Rt != 15) |
|
|
if (inst_cream->Rt != 15) |
|
|
{ |
|
|
{ |
|
|
cpu->Reg[inst_cream->Rt] = cpu->VFP[VFP_OFFSET(VFP_FPSCR)]; |
|
|
|
|
|
|
|
|
cpu->Reg[inst_cream->Rt] = cpu->VFP[VFP_FPSCR]; |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
cpu->NFlag = (cpu->VFP[VFP_OFFSET(VFP_FPSCR)] >> 31) & 1; |
|
|
|
|
|
cpu->ZFlag = (cpu->VFP[VFP_OFFSET(VFP_FPSCR)] >> 30) & 1; |
|
|
|
|
|
cpu->CFlag = (cpu->VFP[VFP_OFFSET(VFP_FPSCR)] >> 29) & 1; |
|
|
|
|
|
cpu->VFlag = (cpu->VFP[VFP_OFFSET(VFP_FPSCR)] >> 28) & 1; |
|
|
|
|
|
|
|
|
cpu->NFlag = (cpu->VFP[VFP_FPSCR] >> 31) & 1; |
|
|
|
|
|
cpu->ZFlag = (cpu->VFP[VFP_FPSCR] >> 30) & 1; |
|
|
|
|
|
cpu->CFlag = (cpu->VFP[VFP_FPSCR] >> 29) & 1; |
|
|
|
|
|
cpu->VFlag = (cpu->VFP[VFP_FPSCR] >> 28) & 1; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
@ -1161,7 +1161,7 @@ VMRS_INST: |
|
|
switch (inst_cream->reg) |
|
|
switch (inst_cream->reg) |
|
|
{ |
|
|
{ |
|
|
case 0: |
|
|
case 0: |
|
|
cpu->Reg[inst_cream->Rt] = cpu->VFP[VFP_OFFSET(VFP_FPSID)]; |
|
|
|
|
|
|
|
|
cpu->Reg[inst_cream->Rt] = cpu->VFP[VFP_FPSID]; |
|
|
break; |
|
|
break; |
|
|
case 6: |
|
|
case 6: |
|
|
/* MVFR1, VFPv3 only ? */ |
|
|
/* MVFR1, VFPv3 only ? */ |
|
|
@ -1172,7 +1172,7 @@ VMRS_INST: |
|
|
LOG_TRACE(Core_ARM11, "\tr%d <= MVFR0 unimplemented\n", inst_cream->Rt); |
|
|
LOG_TRACE(Core_ARM11, "\tr%d <= MVFR0 unimplemented\n", inst_cream->Rt); |
|
|
break; |
|
|
break; |
|
|
case 8: |
|
|
case 8: |
|
|
cpu->Reg[inst_cream->Rt] = cpu->VFP[VFP_OFFSET(VFP_FPEXC)]; |
|
|
|
|
|
|
|
|
cpu->Reg[inst_cream->Rt] = cpu->VFP[VFP_FPEXC]; |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
default: |
|
|
break; |
|
|
break; |
|
|
|