Remove PowerPC artefacts from test_fp_sharing test
PowerPC is not supported platform. It's components are to be removed. Signed-off-by: Dmitriy Korovkin <dmitriy.korovkin@windriver.com>
This commit is contained in:
parent
7a3ee5e95e
commit
869582eb92
2 changed files with 6 additions and 149 deletions
|
@ -87,67 +87,11 @@ typedef struct fpNonVolatileRegSet
|
||||||
#define SIZEOF_FP_VOLATILE_REG_SET sizeof(FP_VOLATILE_REG_SET)
|
#define SIZEOF_FP_VOLATILE_REG_SET sizeof(FP_VOLATILE_REG_SET)
|
||||||
#define SIZEOF_FP_NONVOLATILE_REG_SET 0
|
#define SIZEOF_FP_NONVOLATILE_REG_SET 0
|
||||||
|
|
||||||
#elif defined(CONFIG_ISA_POWERPC)
|
|
||||||
|
|
||||||
#if defined(CONFIG_FLOAT)
|
#else /* ! CONFIG_ISA_IA32 */
|
||||||
|
|
||||||
#define FP_OPTION USE_FP
|
|
||||||
|
|
||||||
/* FP registers (64-bit) */
|
|
||||||
typedef struct fpReg
|
|
||||||
{
|
|
||||||
unsigned char reg[8];
|
|
||||||
} FP_REG;
|
|
||||||
|
|
||||||
/* the set of volatile floating point registers */
|
|
||||||
|
|
||||||
typedef struct fpVolatileRegSet
|
|
||||||
{
|
|
||||||
FP_REG fpRegs[14]; /* f0 -> f13 */
|
|
||||||
} FP_VOLATILE_REG_SET;
|
|
||||||
|
|
||||||
/* the set of non-volatile floating point registers */
|
|
||||||
|
|
||||||
typedef struct fpNonVolatileRegSet
|
|
||||||
{
|
|
||||||
FP_REG fpRegs[18]; /* f14 -> f31 */
|
|
||||||
} FP_NONVOLATILE_REG_SET;
|
|
||||||
|
|
||||||
#define SIZEOF_FP_VOLATILE_REG_SET sizeof(FP_VOLATILE_REG_SET)
|
|
||||||
#define SIZEOF_FP_NONVOLATILE_REG_SET sizeof(FP_NONVOLATILE_REG_SET)
|
|
||||||
|
|
||||||
#elif defined(CONFIG_SUPPORT_SPE)
|
|
||||||
|
|
||||||
#define FP_OPTION USE_SPE
|
|
||||||
|
|
||||||
/* FP registers (64-bit) */
|
|
||||||
typedef struct fpReg
|
|
||||||
{
|
|
||||||
unsigned char reg[4];
|
|
||||||
} FP_REG;
|
|
||||||
|
|
||||||
/* the set of volatile floating point registers */
|
|
||||||
|
|
||||||
typedef struct fpVolatileRegSet
|
|
||||||
{
|
|
||||||
FP_REG fpRegs[11]; /* r0, r3 -> r12 */
|
|
||||||
} FP_VOLATILE_REG_SET;
|
|
||||||
|
|
||||||
/* the set of non-volatile floating point registers */
|
|
||||||
|
|
||||||
typedef struct fpNonVolatileRegSet
|
|
||||||
{
|
|
||||||
FP_REG fpRegs[18]; /* r14 -> r31 */
|
|
||||||
} FP_NONVOLATILE_REG_SET;
|
|
||||||
|
|
||||||
#define SIZEOF_FP_VOLATILE_REG_SET sizeof(FP_VOLATILE_REG_SET)
|
|
||||||
#define SIZEOF_FP_NONVOLATILE_REG_SET sizeof(FP_NONVOLATILE_REG_SET)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
|
||||||
#error Architecture needs to provide a definition for 'struct fpRegSet' and 'struct fpNonVolatileRegSet'
|
#error Architecture needs to provide a definition for 'struct fpRegSet' and 'struct fpNonVolatileRegSet'
|
||||||
#endif
|
#endif /* CONFIG_ISA_IA32 */
|
||||||
|
|
||||||
/* the set of ALL floating point registers */
|
/* the set of ALL floating point registers */
|
||||||
|
|
||||||
|
|
|
@ -56,18 +56,6 @@ to load ALL non-integer registers, but main() should validate that only the
|
||||||
x87 FPU registers are being saved/restored.
|
x87 FPU registers are being saved/restored.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(CONFIG_ISA_POWERPC)
|
|
||||||
#if defined(CONFIG_FSL_E500V2)
|
|
||||||
#if !defined(CONFIG_SUPPORT_SPE)
|
|
||||||
#error The SUPPORT_SPE config option has to be enabled
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#if !defined(CONFIG_FLOAT)
|
|
||||||
#error The FLOAT config option has to be enabled
|
|
||||||
#endif /* FLOAT */
|
|
||||||
#endif /* E500V2 */
|
|
||||||
#endif /* CONFIG_ISA_POWERPC */
|
|
||||||
|
|
||||||
#if defined(CONFIG_ISA_IA32)
|
#if defined(CONFIG_ISA_IA32)
|
||||||
#ifndef CONFIG_FLOAT
|
#ifndef CONFIG_FLOAT
|
||||||
#error Rebuild the nanokernel with the FLOAT config option enabled
|
#error Rebuild the nanokernel with the FLOAT config option enabled
|
||||||
|
@ -170,13 +158,11 @@ void load_store_low(void)
|
||||||
* No need to invoke task_float_enable() since
|
* No need to invoke task_float_enable() since
|
||||||
* AUTOMATIC_FP_ENABLING is in effect
|
* AUTOMATIC_FP_ENABLING is in effect
|
||||||
*/
|
*/
|
||||||
#else
|
#else /* ! CONFIG_AUTOMATIC_FP_ENABLING */
|
||||||
#if defined(CONFIG_FLOAT)
|
#if defined(CONFIG_FLOAT)
|
||||||
task_float_enable(context_self_get());
|
task_float_enable(context_self_get());
|
||||||
#elif defined(CONFIG_SUPPORT_SPE)
|
|
||||||
nanoCpuTaskSpeEnable(context_self_get());
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* CONFIG_AUTOMATIC_FP_ENABLING */
|
||||||
|
|
||||||
#ifdef CONFIG_NANOKERNEL
|
#ifdef CONFIG_NANOKERNEL
|
||||||
/*
|
/*
|
||||||
|
@ -196,7 +182,7 @@ void load_store_low(void)
|
||||||
5, /* priority */
|
5, /* priority */
|
||||||
FP_OPTION /* options */
|
FP_OPTION /* options */
|
||||||
);
|
);
|
||||||
#else
|
#elif defined (CONFIG_MICROKERNEL)
|
||||||
/*
|
/*
|
||||||
* For microkernel builds, preemption tasks are specified in the .vpf file.
|
* For microkernel builds, preemption tasks are specified in the .vpf file.
|
||||||
*
|
*
|
||||||
|
@ -291,8 +277,7 @@ void load_store_low(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_AUTOMATIC_FP_ENABLING) || \
|
#if defined(CONFIG_AUTOMATIC_FP_ENABLING)
|
||||||
defined(CONFIG_AUTOMATIC_SPE_ENABLING)
|
|
||||||
/*
|
/*
|
||||||
* After every 1000 iterations (arbitrarily chosen), explicitly
|
* After every 1000 iterations (arbitrarily chosen), explicitly
|
||||||
* disable floating point operations for the task. The subsequent
|
* disable floating point operations for the task. The subsequent
|
||||||
|
@ -306,8 +291,6 @@ void load_store_low(void)
|
||||||
if ((load_store_low_count % 1000) == 0) {
|
if ((load_store_low_count % 1000) == 0) {
|
||||||
#if defined(CONFIG_FLOAT)
|
#if defined(CONFIG_FLOAT)
|
||||||
task_float_disable(context_self_get());
|
task_float_disable(context_self_get());
|
||||||
#elif defined(CONFIG_SUPPORT_SPE)
|
|
||||||
nanoCpuTaskSpeDisable(context_self_get());
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_AUTOMATIC_FP_ENABLING */
|
#endif /* CONFIG_AUTOMATIC_FP_ENABLING */
|
||||||
|
@ -385,8 +368,6 @@ void load_store_high(void)
|
||||||
|
|
||||||
#if defined(CONFIG_ISA_IA32)
|
#if defined(CONFIG_ISA_IA32)
|
||||||
_LoadThenStoreAllFloatRegisters(&floatRegisterSet);
|
_LoadThenStoreAllFloatRegisters(&floatRegisterSet);
|
||||||
#else
|
|
||||||
_LoadAllFloatRegisters(&floatRegisterSet);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -405,74 +386,6 @@ void load_store_high(void)
|
||||||
task_sleep(1);
|
task_sleep(1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_ISA_IA32
|
|
||||||
/*
|
|
||||||
* Clear the memory buffer (non-volatile register portion only).
|
|
||||||
* Note that for CONFIG_ISA_IA32 configurations, the
|
|
||||||
* FP_NONVOLATILE_REG_SET is empty, and thus has zero size.
|
|
||||||
* As a result, there is no point in checking the non-volatile floating
|
|
||||||
* point registers for the CONFIG_ISA_IA32 configuration option
|
|
||||||
* because there are none.
|
|
||||||
*/
|
|
||||||
|
|
||||||
numNonVolatileBytes = 0;
|
|
||||||
|
|
||||||
for (bufIx = offsetof(FP_REG_SET, fpNonVolRegSet);
|
|
||||||
numNonVolatileBytes < SIZEOF_FP_NONVOLATILE_REG_SET;
|
|
||||||
++bufIx, ++numNonVolatileBytes)
|
|
||||||
floatRegisterSetBytePtr[bufIx] = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Utilize an architecture specific function to dump the contents
|
|
||||||
* of all the non-volatile floating point (and XMM on IA-32) registers
|
|
||||||
* to memory. The routine will return the number of bytes that have
|
|
||||||
* been dumped to memory.
|
|
||||||
*
|
|
||||||
* For architectures where all floating point registers are considered
|
|
||||||
* volatile, no registers are expected to survive across a function call
|
|
||||||
* (nanoTimerStart or nano_fiber_timer_wait) much less across a
|
|
||||||
* (cooperative) context switch to a context (the background task in
|
|
||||||
* this case) that is utilizing floating point.
|
|
||||||
*/
|
|
||||||
|
|
||||||
_StoreNonVolatileFloatRegisters(
|
|
||||||
&floatRegisterSet.fpNonVolRegSet);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Compare each byte of buffer to ensure the expected values are
|
|
||||||
* present. Given that at least one fiber, that is also using
|
|
||||||
* floating point registers, is preempting the background task
|
|
||||||
* every tick, the (lazy) floating point context save/restore
|
|
||||||
* mechanism is being excerised.
|
|
||||||
*
|
|
||||||
* Display an error message and return if any discrepancies are
|
|
||||||
* detected.
|
|
||||||
*/
|
|
||||||
|
|
||||||
numNonVolatileBytes = 0;
|
|
||||||
floatRegInitByte = FIBER_FLOAT_REG_CHECK_BYTE +
|
|
||||||
offsetof(FP_REG_SET, fpNonVolRegSet);
|
|
||||||
|
|
||||||
for (bufIx = offsetof(FP_REG_SET, fpNonVolRegSet);
|
|
||||||
numNonVolatileBytes < SIZEOF_FP_NONVOLATILE_REG_SET;
|
|
||||||
++bufIx, ++numNonVolatileBytes) {
|
|
||||||
if (floatRegisterSetBytePtr[bufIx] !=
|
|
||||||
(char)floatRegInitByte) {
|
|
||||||
TC_ERROR("load_store_high found 0x%x instead of 0x%x"
|
|
||||||
" @ offset 0x%x\n",
|
|
||||||
floatRegisterSetBytePtr[bufIx],
|
|
||||||
(char)floatRegInitByte,
|
|
||||||
bufIx);
|
|
||||||
TC_ERROR("Discrepancy found during iteration %d\n",
|
|
||||||
load_store_high_count);
|
|
||||||
fpu_sharing_error = 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
++floatRegInitByte;
|
|
||||||
}
|
|
||||||
#endif /* !CONFIG_ISA_IA32 */
|
|
||||||
|
|
||||||
/* periodically issue progress report */
|
/* periodically issue progress report */
|
||||||
|
|
||||||
if ((++load_store_high_count % 100) == 0)
|
if ((++load_store_high_count % 100) == 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue