Add cortex-a9 and cortex-a15 targets.
This commit is contained in:
parent
ef75be0e51
commit
229ce2ccd1
|
@ -1,3 +1,8 @@
|
||||||
|
# ifeq logical or
|
||||||
|
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15))
|
||||||
|
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
||||||
|
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CORE), ARMV7)
|
ifeq ($(CORE), ARMV7)
|
||||||
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
||||||
|
|
95
cpuid_arm.c
95
cpuid_arm.c
|
@ -30,16 +30,27 @@
|
||||||
#define CPU_UNKNOWN 0
|
#define CPU_UNKNOWN 0
|
||||||
#define CPU_ARMV6 1
|
#define CPU_ARMV6 1
|
||||||
#define CPU_ARMV7 2
|
#define CPU_ARMV7 2
|
||||||
#define CPU_CORTEXA15 3
|
#define CPU_CORTEXA9 3
|
||||||
|
#define CPU_CORTEXA15 4
|
||||||
|
|
||||||
static char *cpuname[] = {
|
static char *cpuname[] = {
|
||||||
"UNKOWN",
|
"UNKOWN",
|
||||||
"ARMV6",
|
"ARMV6",
|
||||||
"ARMV7",
|
"ARMV7",
|
||||||
|
"CORTEXA9",
|
||||||
"CORTEXA15"
|
"CORTEXA15"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static char *cpuname_lower[] = {
|
||||||
|
"unknown",
|
||||||
|
"armv6",
|
||||||
|
"armv7",
|
||||||
|
"cortexa9",
|
||||||
|
"cortexa15"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
int get_feature(char *search)
|
int get_feature(char *search)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -85,6 +96,29 @@ int detect(void)
|
||||||
char buffer[512], *p;
|
char buffer[512], *p;
|
||||||
p = (char *) NULL ;
|
p = (char *) NULL ;
|
||||||
|
|
||||||
|
infile = fopen("/proc/cpuinfo", "r");
|
||||||
|
while (fgets(buffer, sizeof(buffer), infile))
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!strncmp("CPU part", buffer, 8))
|
||||||
|
{
|
||||||
|
p = strchr(buffer, ':') + 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(infile);
|
||||||
|
if(p != NULL) {
|
||||||
|
if (strstr(p, "0xc09")) {
|
||||||
|
return CPU_CORTEXA9;
|
||||||
|
}
|
||||||
|
if (strstr(p, "0xc15")) {
|
||||||
|
return CPU_CORTEXA15;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
p = (char *) NULL ;
|
||||||
infile = fopen("/proc/cpuinfo", "r");
|
infile = fopen("/proc/cpuinfo", "r");
|
||||||
|
|
||||||
while (fgets(buffer, sizeof(buffer), infile))
|
while (fgets(buffer, sizeof(buffer), infile))
|
||||||
|
@ -142,21 +176,7 @@ void get_architecture(void)
|
||||||
void get_subarchitecture(void)
|
void get_subarchitecture(void)
|
||||||
{
|
{
|
||||||
int d = detect();
|
int d = detect();
|
||||||
switch (d)
|
printf("%s", cpuname[d]);
|
||||||
{
|
|
||||||
|
|
||||||
case CPU_ARMV7:
|
|
||||||
printf("ARMV7");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CPU_ARMV6:
|
|
||||||
printf("ARMV6");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("UNKNOWN");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_subdirname(void)
|
void get_subdirname(void)
|
||||||
|
@ -170,6 +190,36 @@ void get_cpuconfig(void)
|
||||||
int d = detect();
|
int d = detect();
|
||||||
switch (d)
|
switch (d)
|
||||||
{
|
{
|
||||||
|
case CPU_CORTEXA9:
|
||||||
|
printf("#define CORTEXA9\n");
|
||||||
|
printf("#define HAVE_VFP\n");
|
||||||
|
printf("#define HAVE_VFPV3\n");
|
||||||
|
if ( get_feature("neon")) printf("#define HAVE_NEON\n");
|
||||||
|
if ( get_feature("vfpv4")) printf("#define HAVE_VFPV4\n");
|
||||||
|
printf("#define L1_DATA_SIZE 32768\n");
|
||||||
|
printf("#define L1_DATA_LINESIZE 32\n");
|
||||||
|
printf("#define L2_SIZE 1048576\n");
|
||||||
|
printf("#define L2_LINESIZE 32\n");
|
||||||
|
printf("#define DTB_DEFAULT_ENTRIES 128\n");
|
||||||
|
printf("#define DTB_SIZE 4096\n");
|
||||||
|
printf("#define L2_ASSOCIATIVE 4\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CPU_CORTEXA15:
|
||||||
|
printf("#define CORTEXA15\n");
|
||||||
|
printf("#define HAVE_VFP\n");
|
||||||
|
printf("#define HAVE_VFPV3\n");
|
||||||
|
if ( get_feature("neon")) printf("#define HAVE_NEON\n");
|
||||||
|
if ( get_feature("vfpv4")) printf("#define HAVE_VFPV4\n");
|
||||||
|
printf("#define L1_DATA_SIZE 32768\n");
|
||||||
|
printf("#define L1_DATA_LINESIZE 32\n");
|
||||||
|
printf("#define L2_SIZE 1048576\n");
|
||||||
|
printf("#define L2_LINESIZE 32\n");
|
||||||
|
printf("#define DTB_DEFAULT_ENTRIES 128\n");
|
||||||
|
printf("#define DTB_SIZE 4096\n");
|
||||||
|
printf("#define L2_ASSOCIATIVE 4\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
case CPU_ARMV7:
|
case CPU_ARMV7:
|
||||||
printf("#define ARMV7\n");
|
printf("#define ARMV7\n");
|
||||||
|
@ -206,18 +256,7 @@ void get_libname(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
int d = detect();
|
int d = detect();
|
||||||
switch (d)
|
printf("%s", cpuname_lower[d]);
|
||||||
{
|
|
||||||
|
|
||||||
case CPU_ARMV7:
|
|
||||||
printf("armv7\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CPU_ARMV6:
|
|
||||||
printf("armv6\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
30
getarch.c
30
getarch.c
|
@ -727,6 +727,36 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef FORCE_CORTEXA9
|
||||||
|
#define FORCE
|
||||||
|
#define ARCHITECTURE "ARM"
|
||||||
|
#define SUBARCHITECTURE "CORTEXA9"
|
||||||
|
#define SUBDIRNAME "arm"
|
||||||
|
#define ARCHCONFIG "-DCORTEXA9 " \
|
||||||
|
"-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=32 " \
|
||||||
|
"-DL2_SIZE=1048576 -DL2_LINESIZE=32 " \
|
||||||
|
"-DDTB_DEFAULT_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " \
|
||||||
|
"-DHAVE_VFPV3 -DHAVE_VFP -DHAVE_NEON"
|
||||||
|
#define LIBNAME "cortexa9"
|
||||||
|
#define CORENAME "CORTEXA9"
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef FORCE_CORTEXA15
|
||||||
|
#define FORCE
|
||||||
|
#define ARCHITECTURE "ARM"
|
||||||
|
#define SUBARCHITECTURE "CORTEXA15"
|
||||||
|
#define SUBDIRNAME "arm"
|
||||||
|
#define ARCHCONFIG "-DCORTEXA15 " \
|
||||||
|
"-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=32 " \
|
||||||
|
"-DL2_SIZE=1048576 -DL2_LINESIZE=32 " \
|
||||||
|
"-DDTB_DEFAULT_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " \
|
||||||
|
"-DHAVE_VFPV3 -DHAVE_VFP -DHAVE_NEON"
|
||||||
|
#define LIBNAME "cortexa9"
|
||||||
|
#define CORENAME "CORTEXA9"
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FORCE_ARMV6
|
#ifdef FORCE_ARMV6
|
||||||
#define FORCE
|
#define FORCE
|
||||||
#define ARCHITECTURE "ARM"
|
#define ARCHITECTURE "ARM"
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
include $(KERNELDIR)/KERNEL.ARMV7
|
|
@ -0,0 +1 @@
|
||||||
|
include $(KERNELDIR)/KERNEL.ARMV7
|
82
param.h
82
param.h
|
@ -2206,6 +2206,88 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CORTEXA9
|
||||||
|
#define SNUMOPT 2
|
||||||
|
#define DNUMOPT 2
|
||||||
|
|
||||||
|
#define GEMM_DEFAULT_OFFSET_A 0
|
||||||
|
#define GEMM_DEFAULT_OFFSET_B 0
|
||||||
|
#define GEMM_DEFAULT_ALIGN 0x03fffUL
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_UNROLL_M 4
|
||||||
|
#define SGEMM_DEFAULT_UNROLL_N 4
|
||||||
|
|
||||||
|
#define DGEMM_DEFAULT_UNROLL_M 4
|
||||||
|
#define DGEMM_DEFAULT_UNROLL_N 4
|
||||||
|
|
||||||
|
#define CGEMM_DEFAULT_UNROLL_M 2
|
||||||
|
#define CGEMM_DEFAULT_UNROLL_N 2
|
||||||
|
|
||||||
|
#define ZGEMM_DEFAULT_UNROLL_M 2
|
||||||
|
#define ZGEMM_DEFAULT_UNROLL_N 2
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_P 128
|
||||||
|
#define DGEMM_DEFAULT_P 128
|
||||||
|
#define CGEMM_DEFAULT_P 96
|
||||||
|
#define ZGEMM_DEFAULT_P 64
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_Q 240
|
||||||
|
#define DGEMM_DEFAULT_Q 120
|
||||||
|
#define CGEMM_DEFAULT_Q 120
|
||||||
|
#define ZGEMM_DEFAULT_Q 120
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_R 12288
|
||||||
|
#define DGEMM_DEFAULT_R 8192
|
||||||
|
#define CGEMM_DEFAULT_R 4096
|
||||||
|
#define ZGEMM_DEFAULT_R 4096
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define SYMV_P 16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CORTEXA15
|
||||||
|
#define SNUMOPT 2
|
||||||
|
#define DNUMOPT 2
|
||||||
|
|
||||||
|
#define GEMM_DEFAULT_OFFSET_A 0
|
||||||
|
#define GEMM_DEFAULT_OFFSET_B 0
|
||||||
|
#define GEMM_DEFAULT_ALIGN 0x03fffUL
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_UNROLL_M 4
|
||||||
|
#define SGEMM_DEFAULT_UNROLL_N 4
|
||||||
|
|
||||||
|
#define DGEMM_DEFAULT_UNROLL_M 4
|
||||||
|
#define DGEMM_DEFAULT_UNROLL_N 4
|
||||||
|
|
||||||
|
#define CGEMM_DEFAULT_UNROLL_M 2
|
||||||
|
#define CGEMM_DEFAULT_UNROLL_N 2
|
||||||
|
|
||||||
|
#define ZGEMM_DEFAULT_UNROLL_M 2
|
||||||
|
#define ZGEMM_DEFAULT_UNROLL_N 2
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_P 128
|
||||||
|
#define DGEMM_DEFAULT_P 128
|
||||||
|
#define CGEMM_DEFAULT_P 96
|
||||||
|
#define ZGEMM_DEFAULT_P 64
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_Q 240
|
||||||
|
#define DGEMM_DEFAULT_Q 120
|
||||||
|
#define CGEMM_DEFAULT_Q 120
|
||||||
|
#define ZGEMM_DEFAULT_Q 120
|
||||||
|
|
||||||
|
#define SGEMM_DEFAULT_R 12288
|
||||||
|
#define DGEMM_DEFAULT_R 8192
|
||||||
|
#define CGEMM_DEFAULT_R 4096
|
||||||
|
#define ZGEMM_DEFAULT_R 4096
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define SYMV_P 16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef GENERIC
|
#ifdef GENERIC
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue