mirror of
https://github.com/cyring/CoreFreq.git
synced 2025-07-23 20:20:40 +02:00
[AArch64] Display the Streaming Vector Control Register SVCR
* Query and export the Media and VFP Feature Registers `MVFR`
This commit is contained in:
@@ -726,6 +726,55 @@ typedef union
|
|||||||
};
|
};
|
||||||
} SSBS2;
|
} SSBS2;
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
unsigned long long value;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
unsigned long long
|
||||||
|
SIMDReg : 4-0,
|
||||||
|
FPSP : 8-4,
|
||||||
|
FPDP : 12-8,
|
||||||
|
FPTrap : 16-12,
|
||||||
|
FPDivide : 20-16,
|
||||||
|
FPSqrt : 24-20,
|
||||||
|
FPShVec : 28-24,
|
||||||
|
FPRound : 32-28,
|
||||||
|
RES0 : 64-32;
|
||||||
|
};
|
||||||
|
} MVFR0;
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
unsigned long long value;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
unsigned long long
|
||||||
|
FPFtZ : 4-0,
|
||||||
|
FPDNaN : 8-4,
|
||||||
|
SIMDLS : 12-8,
|
||||||
|
SIMDInt : 16-12,
|
||||||
|
SIMDSP : 20-16,
|
||||||
|
SIMDHP : 24-20,
|
||||||
|
FPHP : 28-24,
|
||||||
|
SIMDFMAC : 32-28,
|
||||||
|
RES0 : 64-32;
|
||||||
|
};
|
||||||
|
} MVFR1;
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
unsigned long long value;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
unsigned long long
|
||||||
|
SIMDMisc : 4-0,
|
||||||
|
FPMisc : 8-4,
|
||||||
|
RES0 : 32-8,
|
||||||
|
RES1 : 64-32;
|
||||||
|
};
|
||||||
|
} MVFR2;
|
||||||
|
|
||||||
typedef union
|
typedef union
|
||||||
{ /* R82; A55; A75; A76; A76AE; A77; A78; A78AE; A78C; X1; X1C; N3; V1 */
|
{ /* R82; A55; A75; A76; A76AE; A77; A78; A78AE; A78C; X1; X1C; N3; V1 */
|
||||||
unsigned long long value; /* Pkg:0x0000000007bfda77 */
|
unsigned long long value; /* Pkg:0x0000000007bfda77 */
|
||||||
|
@@ -732,6 +732,47 @@ void JsonSysInfo(RO(SHM_STRUCT) *RO(Shm))
|
|||||||
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.SME_SF8DP2);
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.SME_SF8DP2);
|
||||||
json_end_object(&s);
|
json_end_object(&s);
|
||||||
}
|
}
|
||||||
|
json_key(&s, "MVFR");
|
||||||
|
{
|
||||||
|
json_start_object(&s);
|
||||||
|
json_key(&s, "FP_Round");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_Round);
|
||||||
|
json_key(&s, "FP_Sh_Vec");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_Sh_Vec);
|
||||||
|
json_key(&s, "FP_Sqrt");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_Sqrt);
|
||||||
|
json_key(&s, "FP_Divide");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_Divide);
|
||||||
|
json_key(&s, "FP_Trap");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_Trap);
|
||||||
|
json_key(&s, "FP_DP");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_DP);
|
||||||
|
json_key(&s, "FP_SP");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_SP);
|
||||||
|
json_key(&s, "FP_HP");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_HP);
|
||||||
|
json_key(&s, "FP_NaN");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_NaN);
|
||||||
|
json_key(&s, "FP_FtZ");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_FtZ);
|
||||||
|
json_key(&s, "FP_Misc");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.FP_Misc);
|
||||||
|
json_key(&s, "SIMD_Reg");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.SIMD_Reg);
|
||||||
|
json_key(&s, "SIMD_FMA");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.SIMD_FMA);
|
||||||
|
json_key(&s, "SIMD_HP");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.SIMD_HP);
|
||||||
|
json_key(&s, "SIMD_SP");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.SIMD_SP);
|
||||||
|
json_key(&s, "SIMD_Int");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.SIMD_Int);
|
||||||
|
json_key(&s, "SIMD_LS");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.SIMD_LS);
|
||||||
|
json_key(&s, "SIMD_Misc");
|
||||||
|
json_literal(&s, "%u", (unsigned) RO(Shm)->Proc.Features.SIMD_Misc);
|
||||||
|
json_end_object(&s);
|
||||||
|
}
|
||||||
json_key(&s, "MISC");
|
json_key(&s, "MISC");
|
||||||
{
|
{
|
||||||
json_start_object(&s);
|
json_start_object(&s);
|
||||||
|
@@ -839,6 +839,10 @@
|
|||||||
#define RSC_SYS_REG_EL_EXEC_CODE_EN " Executes in AArch64 or AArch32 "
|
#define RSC_SYS_REG_EL_EXEC_CODE_EN " Executes in AArch64 or AArch32 "
|
||||||
#define RSC_SYS_REG_EL_SEC_CODE_EN " Secure Exception Level "
|
#define RSC_SYS_REG_EL_SEC_CODE_EN " Secure Exception Level "
|
||||||
|
|
||||||
|
#define RSC_SYS_REG_SVCR_CODE_EN " Streaming Vector Control Register "
|
||||||
|
#define RSC_SYS_REG_SVCR_ZA_CODE_EN " SME ZA storage "
|
||||||
|
#define RSC_SYS_REG_SVCR_SM_CODE_EN " Streaming SVE mode "
|
||||||
|
|
||||||
#define RSC_SYS_REG_CPACR_CODE_EN " Access Control Register "
|
#define RSC_SYS_REG_CPACR_CODE_EN " Access Control Register "
|
||||||
#define RSC_SYS_REG_ACR_TCP_CODE_EN " Trap Coprocessor Access Control "
|
#define RSC_SYS_REG_ACR_TCP_CODE_EN " Trap Coprocessor Access Control "
|
||||||
#define RSC_SYS_REG_ACR_TAM_CODE_EN " Trap Activity Monitor Access "
|
#define RSC_SYS_REG_ACR_TAM_CODE_EN " Trap Activity Monitor Access "
|
||||||
@@ -2094,6 +2098,8 @@
|
|||||||
"Exec\0: \0 64 \0 32 \0 \0 64 \0 32 \0 \0" \
|
"Exec\0: \0 64 \0 32 \0 \0 64 \0 32 \0 \0" \
|
||||||
" 64 \0 32 \0 SEC\0 \0 64 \0 32 "
|
" 64 \0 32 \0 SEC\0 \0 64 \0 32 "
|
||||||
|
|
||||||
|
#define RSC_SYS_REG_HDR_SVCR_CODE "SVCR\0 ZA \0 SM "
|
||||||
|
|
||||||
#define RSC_SYS_REG_HDR_CPACR_CODE \
|
#define RSC_SYS_REG_HDR_CPACR_CODE \
|
||||||
"ACR \0 TCP\0 TAM\0 POR\0 TTA\0 SME\0 FP \0 ZEN\0 R\0ES "
|
"ACR \0 TCP\0 TAM\0 POR\0 TTA\0 SME\0 FP \0 ZEN\0 R\0ES "
|
||||||
|
|
||||||
|
@@ -531,6 +531,10 @@ do echo -en "$h$l\t""\xc3""\x$h$l""\t"; done; done;echo
|
|||||||
#define RSC_SYS_REG_EL_EXEC_CODE_FR RSC_SYS_REG_EL_EXEC_CODE_EN
|
#define RSC_SYS_REG_EL_EXEC_CODE_FR RSC_SYS_REG_EL_EXEC_CODE_EN
|
||||||
#define RSC_SYS_REG_EL_SEC_CODE_FR RSC_SYS_REG_EL_SEC_CODE_EN
|
#define RSC_SYS_REG_EL_SEC_CODE_FR RSC_SYS_REG_EL_SEC_CODE_EN
|
||||||
|
|
||||||
|
#define RSC_SYS_REG_SVCR_CODE_FR RSC_SYS_REG_SVCR_CODE_EN
|
||||||
|
#define RSC_SYS_REG_SVCR_ZA_CODE_FR RSC_SYS_REG_SVCR_ZA_CODE_EN
|
||||||
|
#define RSC_SYS_REG_SVCR_SM_CODE_FR RSC_SYS_REG_SVCR_SM_CODE_EN
|
||||||
|
|
||||||
#define RSC_SYS_REG_CPACR_CODE_FR RSC_SYS_REG_CPACR_CODE_EN
|
#define RSC_SYS_REG_CPACR_CODE_FR RSC_SYS_REG_CPACR_CODE_EN
|
||||||
#define RSC_SYS_REG_ACR_TCP_CODE_FR RSC_SYS_REG_ACR_TCP_CODE_EN
|
#define RSC_SYS_REG_ACR_TCP_CODE_FR RSC_SYS_REG_ACR_TCP_CODE_EN
|
||||||
#define RSC_SYS_REG_ACR_TAM_CODE_FR RSC_SYS_REG_ACR_TAM_CODE_EN
|
#define RSC_SYS_REG_ACR_TAM_CODE_FR RSC_SYS_REG_ACR_TAM_CODE_EN
|
||||||
|
@@ -740,6 +740,10 @@ RESOURCE_ST Resource[] = {
|
|||||||
LDT(RSC_SYS_REG_EL),
|
LDT(RSC_SYS_REG_EL),
|
||||||
LDT(RSC_SYS_REG_EL_EXEC),
|
LDT(RSC_SYS_REG_EL_EXEC),
|
||||||
LDT(RSC_SYS_REG_EL_SEC),
|
LDT(RSC_SYS_REG_EL_SEC),
|
||||||
|
LDQ(RSC_SYS_REG_HDR_SVCR),
|
||||||
|
LDT(RSC_SYS_REG_SVCR),
|
||||||
|
LDT(RSC_SYS_REG_SVCR_ZA),
|
||||||
|
LDT(RSC_SYS_REG_SVCR_SM),
|
||||||
LDQ(RSC_SYS_REG_HDR_CPACR),
|
LDQ(RSC_SYS_REG_HDR_CPACR),
|
||||||
LDT(RSC_SYS_REG_CPACR),
|
LDT(RSC_SYS_REG_CPACR),
|
||||||
LDT(RSC_SYS_REG_ACR_TCP),
|
LDT(RSC_SYS_REG_ACR_TCP),
|
||||||
|
@@ -563,6 +563,10 @@ enum {
|
|||||||
RSC_SYS_REG_EL,
|
RSC_SYS_REG_EL,
|
||||||
RSC_SYS_REG_EL_EXEC,
|
RSC_SYS_REG_EL_EXEC,
|
||||||
RSC_SYS_REG_EL_SEC,
|
RSC_SYS_REG_EL_SEC,
|
||||||
|
RSC_SYS_REG_HDR_SVCR,
|
||||||
|
RSC_SYS_REG_SVCR,
|
||||||
|
RSC_SYS_REG_SVCR_ZA,
|
||||||
|
RSC_SYS_REG_SVCR_SM,
|
||||||
RSC_SYS_REG_HDR_CPACR,
|
RSC_SYS_REG_HDR_CPACR,
|
||||||
RSC_SYS_REG_CPACR,
|
RSC_SYS_REG_CPACR,
|
||||||
RSC_SYS_REG_ACR_TCP,
|
RSC_SYS_REG_ACR_TCP,
|
||||||
|
@@ -453,7 +453,8 @@ REASON_CODE SystemRegisters( Window *win,
|
|||||||
};
|
};
|
||||||
enum AUTOMAT {
|
enum AUTOMAT {
|
||||||
DO_END, DO_SPC, DO_CPU, DO_FLAG, DO_HCR,
|
DO_END, DO_SPC, DO_CPU, DO_FLAG, DO_HCR,
|
||||||
DO_SCTLR, DO_SCTLR2, DO_EL, DO_FPSR, DO_FPCR, DO_ACR
|
DO_SCTLR, DO_SCTLR2, DO_EL, DO_FPSR, DO_FPCR,
|
||||||
|
DO_SVCR, DO_ACR
|
||||||
};
|
};
|
||||||
const struct SR_ST {
|
const struct SR_ST {
|
||||||
struct SR_HDR {
|
struct SR_HDR {
|
||||||
@@ -1036,9 +1037,9 @@ REASON_CODE SystemRegisters( Window *win,
|
|||||||
[11] = {&RSC(SYS_REG_HDR_FPSR).CODE()[55],RSC(SYS_REG_FPSR_IOC).CODE()},
|
[11] = {&RSC(SYS_REG_HDR_FPSR).CODE()[55],RSC(SYS_REG_FPSR_IOC).CODE()},
|
||||||
[12] = {RSC(SYS_REGS_SPACE).CODE(), NULL},
|
[12] = {RSC(SYS_REGS_SPACE).CODE(), NULL},
|
||||||
[13] = {RSC(SYS_REGS_SPACE).CODE(), NULL},
|
[13] = {RSC(SYS_REGS_SPACE).CODE(), NULL},
|
||||||
[14] = {RSC(SYS_REGS_SPACE).CODE(), NULL},
|
[14] = {&RSC(SYS_REG_HDR_SVCR).CODE()[ 0],RSC(SYS_REG_SVCR).CODE()},
|
||||||
[15] = {RSC(SYS_REGS_SPACE).CODE(), NULL},
|
[15] = {&RSC(SYS_REG_HDR_SVCR).CODE()[ 5],RSC(SYS_REG_SVCR_ZA).CODE()},
|
||||||
[16] = {RSC(SYS_REGS_SPACE).CODE(), NULL},
|
[16] = {&RSC(SYS_REG_HDR_SVCR).CODE()[10],RSC(SYS_REG_SVCR_SM).CODE()},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
},
|
},
|
||||||
.flag = (struct SR_BIT[]) {
|
.flag = (struct SR_BIT[]) {
|
||||||
@@ -1056,9 +1057,9 @@ REASON_CODE SystemRegisters( Window *win,
|
|||||||
[11] = {DO_FPSR, 1 , FPSR_IOC , 1 },
|
[11] = {DO_FPSR, 1 , FPSR_IOC , 1 },
|
||||||
[12] = {DO_SPC , 1 , UNDEF_CR , 0 },
|
[12] = {DO_SPC , 1 , UNDEF_CR , 0 },
|
||||||
[13] = {DO_SPC , 1 , UNDEF_CR , 0 },
|
[13] = {DO_SPC , 1 , UNDEF_CR , 0 },
|
||||||
[14] = {DO_SPC , 1 , UNDEF_CR , 0 },
|
[14] = {DO_CPU , 1 , UNDEF_CR , 0 },
|
||||||
[15] = {DO_SPC , 1 , UNDEF_CR , 0 },
|
[15] = {DO_SVCR, RO(Shm)->Proc.Features.SME, SVCR_SMEZA, 1 },
|
||||||
[16] = {DO_SPC , 1 , UNDEF_CR , 0 },
|
[16] = {DO_SVCR, RO(Shm)->Proc.Features.SME, SVCR_SVEME, 1 },
|
||||||
{DO_END , 1 , UNDEF_CR , 0 }
|
{DO_END , 1 , UNDEF_CR , 0 }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1182,6 +1183,11 @@ REASON_CODE SystemRegisters( Window *win,
|
|||||||
BITEXTRZ(RO(Shm)->Cpu[cpu].SystemRegister.FPCR,
|
BITEXTRZ(RO(Shm)->Cpu[cpu].SystemRegister.FPCR,
|
||||||
pFlag->pos, pFlag->len));
|
pFlag->pos, pFlag->len));
|
||||||
break;
|
break;
|
||||||
|
case DO_SVCR:
|
||||||
|
PRT(REG, attrib[2], "%3llx ",
|
||||||
|
BITEXTRZ(RO(Shm)->Cpu[cpu].SystemRegister.SVCR,
|
||||||
|
pFlag->pos, pFlag->len));
|
||||||
|
break;
|
||||||
case DO_ACR:
|
case DO_ACR:
|
||||||
PRT(REG, attrib[2], "%3llx ",
|
PRT(REG, attrib[2], "%3llx ",
|
||||||
BITEXTRZ(RO(Shm)->Cpu[cpu].SystemRegister.CPACR,
|
BITEXTRZ(RO(Shm)->Cpu[cpu].SystemRegister.CPACR,
|
||||||
|
@@ -524,6 +524,9 @@ static void Query_Features(void *pArg)
|
|||||||
volatile AA64MMFR2 mmfr2;
|
volatile AA64MMFR2 mmfr2;
|
||||||
volatile AA64PFR0 pfr0;
|
volatile AA64PFR0 pfr0;
|
||||||
volatile AA64PFR1 pfr1;
|
volatile AA64PFR1 pfr1;
|
||||||
|
volatile MVFR0 mvfr0;
|
||||||
|
volatile MVFR1 mvfr1;
|
||||||
|
volatile MVFR2 mvfr2;
|
||||||
|
|
||||||
iArg->Features->Info.Vendor.CRC = CRC_RESERVED;
|
iArg->Features->Info.Vendor.CRC = CRC_RESERVED;
|
||||||
iArg->SMT_Count = 1;
|
iArg->SMT_Count = 1;
|
||||||
@@ -542,6 +545,9 @@ static void Query_Features(void *pArg)
|
|||||||
"mrs %[mmfr1], id_aa64mmfr1_el1""\n\t"
|
"mrs %[mmfr1], id_aa64mmfr1_el1""\n\t"
|
||||||
"mrs %[pfr0] , id_aa64pfr0_el1""\n\t"
|
"mrs %[pfr0] , id_aa64pfr0_el1""\n\t"
|
||||||
"mrs %[pfr1] , id_aa64pfr1_el1""\n\t"
|
"mrs %[pfr1] , id_aa64pfr1_el1""\n\t"
|
||||||
|
"mrs %[mvfr0], mvfr0_el1" "\n\t"
|
||||||
|
"mrs %[mvfr1], mvfr1_el1" "\n\t"
|
||||||
|
"mrs %[mvfr2], mvfr2_el1" "\n\t"
|
||||||
"isb"
|
"isb"
|
||||||
: [midr] "=r" (midr),
|
: [midr] "=r" (midr),
|
||||||
[cntfrq] "=r" (cntfrq),
|
[cntfrq] "=r" (cntfrq),
|
||||||
@@ -554,7 +560,10 @@ static void Query_Features(void *pArg)
|
|||||||
[mmfr0] "=r" (mmfr0),
|
[mmfr0] "=r" (mmfr0),
|
||||||
[mmfr1] "=r" (mmfr1),
|
[mmfr1] "=r" (mmfr1),
|
||||||
[pfr0] "=r" (pfr0),
|
[pfr0] "=r" (pfr0),
|
||||||
[pfr1] "=r" (pfr1)
|
[pfr1] "=r" (pfr1),
|
||||||
|
[mvfr0] "=r" (mvfr0),
|
||||||
|
[mvfr1] "=r" (mvfr1),
|
||||||
|
[mvfr2] "=r" (mvfr2)
|
||||||
:
|
:
|
||||||
: "memory"
|
: "memory"
|
||||||
);
|
);
|
||||||
@@ -1553,6 +1562,179 @@ static void Query_Features(void *pArg)
|
|||||||
iArg->Features->SME_SF8DP4 = smfr0.SF8DP4;
|
iArg->Features->SME_SF8DP4 = smfr0.SF8DP4;
|
||||||
iArg->Features->SME_SF8DP2 = smfr0.SF8DP2;
|
iArg->Features->SME_SF8DP2 = smfr0.SF8DP2;
|
||||||
}
|
}
|
||||||
|
switch (mvfr0.FPRound) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_Round = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_Round = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr0.FPShVec) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_Sh_Vec = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_Sh_Vec = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr0.FPSqrt) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_Sqrt = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_Sqrt = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr0.FPDivide) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_Divide = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_Divide = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr0.FPTrap) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_Trap = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_Trap = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr0.FPDP) {
|
||||||
|
case 0b0010:
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_DP = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_DP = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr0.FPSP) {
|
||||||
|
case 0b0010:
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_SP = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_SP = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr1.FPHP) {
|
||||||
|
case 0b0011:
|
||||||
|
case 0b0010:
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_HP = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case 0b0000:
|
||||||
|
iArg->Features->FP_HP = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr0.SIMDReg) {
|
||||||
|
case 0b0010:
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->SIMD_Reg = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->SIMD_Reg = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr1.SIMDFMAC) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->SIMD_FMA = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->SIMD_FMA = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr1.SIMDHP) {
|
||||||
|
case 0b0010:
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->SIMD_HP = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->SIMD_HP = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr1.SIMDSP) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->SIMD_SP = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->SIMD_SP = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr1.SIMDInt) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->SIMD_Int = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->SIMD_Int = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr1.SIMDLS) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->SIMD_LS = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->SIMD_LS = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr1.FPDNaN) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_NaN = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_NaN = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr1.FPFtZ) {
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_FtZ = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_FtZ = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr2.FPMisc) {
|
||||||
|
case 0b0100:
|
||||||
|
case 0b0011:
|
||||||
|
case 0b0010:
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->FP_Misc = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->FP_Misc = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (mvfr2.SIMDMisc) {
|
||||||
|
case 0b0011:
|
||||||
|
case 0b0010:
|
||||||
|
case 0b0001:
|
||||||
|
iArg->Features->SIMD_Misc = 1;
|
||||||
|
break;
|
||||||
|
case 0b0000:
|
||||||
|
default:
|
||||||
|
iArg->Features->SIMD_Misc = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
/* Reset the performance features bits: present is 0b1 */
|
/* Reset the performance features bits: present is 0b1 */
|
||||||
iArg->Features->PerfMon.CoreCycles = 0b0;
|
iArg->Features->PerfMon.CoreCycles = 0b0;
|
||||||
iArg->Features->PerfMon.InstrRetired = 0b0;
|
iArg->Features->PerfMon.InstrRetired = 0b0;
|
||||||
|
@@ -295,6 +295,9 @@ enum SYS_REG {
|
|||||||
FPCR_RM = 22, /* [23:22] */
|
FPCR_RM = 22, /* [23:22] */
|
||||||
FPCR_FZH = 19,
|
FPCR_FZH = 19,
|
||||||
|
|
||||||
|
SVCR_SMEZA = 1,
|
||||||
|
SVCR_SVEME = 0,
|
||||||
|
|
||||||
ACR_TCPAC = 31,
|
ACR_TCPAC = 31,
|
||||||
ACR_TAM = 30,
|
ACR_TAM = 30,
|
||||||
ACR_E0POE = 29,
|
ACR_E0POE = 29,
|
||||||
@@ -992,7 +995,25 @@ typedef struct /* BSP features. */
|
|||||||
MTE : 17-14,
|
MTE : 17-14,
|
||||||
DF2 : 18-17,
|
DF2 : 18-17,
|
||||||
PFAR : 19-18,
|
PFAR : 19-18,
|
||||||
_Unused1_ : 64-19;
|
FP_Round : 20-19,
|
||||||
|
FP_Sh_Vec : 21-20,
|
||||||
|
FP_Sqrt : 22-21,
|
||||||
|
FP_Divide : 23-22,
|
||||||
|
FP_Trap : 24-23,
|
||||||
|
FP_DP : 25-24,
|
||||||
|
FP_SP : 26-25,
|
||||||
|
FP_HP : 27-26,
|
||||||
|
FP_NaN : 28-27,
|
||||||
|
FP_FtZ : 29-28,
|
||||||
|
FP_Misc : 30-29,
|
||||||
|
SIMD_Reg : 31-30,
|
||||||
|
SIMD_FMA : 32-31,
|
||||||
|
SIMD_HP : 33-32,
|
||||||
|
SIMD_SP : 34-33,
|
||||||
|
SIMD_Int : 35-34,
|
||||||
|
SIMD_LS : 36-35,
|
||||||
|
SIMD_Misc : 37-36,
|
||||||
|
_Unused1_ : 64-37;
|
||||||
|
|
||||||
Bit64 InvariantTSC : 8-0,
|
Bit64 InvariantTSC : 8-0,
|
||||||
HyperThreading : 9-8,
|
HyperThreading : 9-8,
|
||||||
|
Reference in New Issue
Block a user