Skip to content

Commit d1c6469

Browse files
committed
MIPS n32 ABI support, MSA support detection and rename ARCH, ARCHFLAGS
Signed-off-by: Shivraj Patil <[email protected]>
1 parent b544be9 commit d1c6469

32 files changed

+266
-160
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,8 @@ ifndef NOFORTRAN
228228
-@echo "LOADOPTS = $(FFLAGS) $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
229229
-@echo "CC = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc
230230
-@echo "override CFLAGS = $(LAPACK_CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
231-
-@echo "ARCH = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
232-
-@echo "ARCHFLAGS = -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
231+
-@echo "AR = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
232+
-@echo "ARFLAGS = -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
233233
-@echo "RANLIB = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
234234
-@echo "LAPACKLIB = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
235235
-@echo "TMGLIB = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc

Makefile.prebuild

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,26 @@ ifdef CPUIDEMU
1717
EXFLAGS = -DCPUIDEMU -DVENDOR=99
1818
endif
1919

20+
ifeq ($(TARGET), P5600)
21+
TARGET_FLAGS = -mips32r5
22+
endif
23+
24+
ifeq ($(TARGET), I6400)
25+
TARGET_FLAGS = -mips64r6
26+
endif
27+
28+
ifeq ($(TARGET), P6600)
29+
TARGET_FLAGS = -mips64r6
30+
endif
31+
2032
all: getarch_2nd
2133
./getarch_2nd 0 >> $(TARGET_MAKE)
2234
./getarch_2nd 1 >> $(TARGET_CONF)
2335

2436
config.h : c_check f_check getarch
25-
perl ./c_check $(TARGET_MAKE) $(TARGET_CONF) $(CC)
37+
perl ./c_check $(TARGET_MAKE) $(TARGET_CONF) $(CC) $(TARGET_FLAGS)
2638
ifneq ($(ONLY_CBLAS), 1)
27-
perl ./f_check $(TARGET_MAKE) $(TARGET_CONF) $(FC)
39+
perl ./f_check $(TARGET_MAKE) $(TARGET_CONF) $(FC) $(TARGET_FLAGS)
2840
else
2941
#When we only build CBLAS, we set NOFORTRAN=2
3042
echo "NOFORTRAN=2" >> $(TARGET_MAKE)

Makefile.system

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ ifndef GOTOBLAS_MAKEFILE
159159
export GOTOBLAS_MAKEFILE = 1
160160

161161
# Generating Makefile.conf and config.h
162-
DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) all)
162+
DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) TARGET=$(TARGET) all)
163163

164164
ifndef TARGET_CORE
165165
include $(TOPDIR)/Makefile.conf
@@ -502,13 +502,16 @@ endif
502502

503503
ifdef NO_BINARY_MODE
504504

505-
ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
505+
ifeq ($(ARCH), $(filter $(ARCH),mips64))
506506
ifdef BINARY64
507507
CCOMMON_OPT += -mabi=64
508508
else
509-
CCOMMON_OPT += -mabi=32
509+
CCOMMON_OPT += -mabi=n32
510510
endif
511511
BINARY_DEFINED = 1
512+
else ifeq ($(ARCH), $(filter $(ARCH),mips))
513+
CCOMMON_OPT += -mabi=32
514+
BINARY_DEFINED = 1
512515
endif
513516

514517
ifeq ($(CORE), LOONGSON3A)
@@ -522,13 +525,18 @@ FCOMMON_OPT += -march=mips64
522525
endif
523526

524527
ifeq ($(CORE), P5600)
525-
CCOMMON_OPT += -mmsa
526-
FCOMMON_OPT += -mmsa
528+
CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MIPS_SIMD_FLAGS)
529+
FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MIPS_SIMD_FLAGS)
530+
endif
531+
532+
ifeq ($(CORE), I6400)
533+
CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MIPS_SIMD_FLAGS)
534+
FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MIPS_SIMD_FLAGS)
527535
endif
528536

529-
ifneq ($(filter $(CORE), I6400 P6600),)
530-
CCOMMON_OPT += -mmsa
531-
FCOMMON_OPT += -mmsa
537+
ifeq ($(CORE), P6600)
538+
CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MIPS_SIMD_FLAGS)
539+
FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MIPS_SIMD_FLAGS)
532540
endif
533541

534542
ifeq ($(OSNAME), AIX)
@@ -599,12 +607,14 @@ ifneq ($(NO_LAPACK), 1)
599607
EXTRALIB += -lgfortran
600608
endif
601609
ifdef NO_BINARY_MODE
602-
ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
610+
ifeq ($(ARCH), $(filter $(ARCH),mips64))
603611
ifdef BINARY64
604612
FCOMMON_OPT += -mabi=64
605613
else
606-
FCOMMON_OPT += -mabi=32
614+
FCOMMON_OPT += -mabi=n32
607615
endif
616+
else ifeq ($(ARCH), $(filter $(ARCH),mips))
617+
FCOMMON_OPT += -mabi=32
608618
endif
609619
else
610620
ifdef BINARY64
@@ -687,20 +697,6 @@ FCOMMON_OPT += -i8
687697
endif
688698
endif
689699
endif
690-
691-
ifeq ($(filter $(ARCH),mips64 mips))
692-
ifndef BINARY64
693-
FCOMMON_OPT += -m32
694-
else
695-
FCOMMON_OPT += -m64
696-
endif
697-
else
698-
ifdef BINARY64
699-
FCOMMON_OPT += -mabi=64
700-
else
701-
FCOMMON_OPT += -mabi=32
702-
endif
703-
endif
704700

705701
ifeq ($(USE_OPENMP), 1)
706702
FCOMMON_OPT += -mp

c_check

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/usr/bin/perl
22

33
use File::Basename;
4+
use File::Temp qw(tempfile);
45

56
# Checking cross compile
67
$hostos = `uname -s | sed -e s/\-.*//`; chop($hostos);
@@ -10,6 +11,7 @@ $hostarch = "arm" if ($hostarch =~ /^arm.*/);
1011
$hostarch = "arm64" if ($hostarch eq "aarch64");
1112
$hostarch = "power" if ($hostarch =~ /^(powerpc|ppc).*/);
1213

14+
$tmpf = new File::Temp( UNLINK => 1 );
1315
$binary = $ENV{"BINARY"};
1416

1517
$makefile = shift(@ARGV);
@@ -79,10 +81,15 @@ if ($os eq "AIX") {
7981
$defined = 1;
8082
}
8183

82-
if (($architecture eq "mips") || ($architecture eq "mips64")) {
83-
$compiler_name .= " -mabi=32" if ($binary eq "32");
84-
$compiler_name .= " -mabi=64" if ($binary eq "64");
85-
$defined = 1;
84+
if ($architecture eq "mips") {
85+
$compiler_name .= " -mabi=32";
86+
$defined = 1;
87+
}
88+
89+
if ($architecture eq "mips64") {
90+
$compiler_name .= " -mabi=n32" if ($binary eq "32");
91+
$compiler_name .= " -mabi=64" if ($binary eq "64");
92+
$defined = 1;
8693
}
8794

8895
if (($architecture eq "arm") || ($architecture eq "arm64")) {
@@ -152,6 +159,26 @@ if ($?) {
152159
die 1;
153160
}
154161

162+
$mips_simd = 1;
163+
if (($architecture eq "mips") || ($architecture eq "mips64")) {
164+
$code = '"addvi.b $w0, $w1, 1"';
165+
$msa_flags = "-mmsa -mfp64 -msched-weight -mload-store-pairs";
166+
print $tmpf "#include <msa.h>\n\n";
167+
print $tmpf "void main(void){ __asm__ volatile($code); }\n";
168+
169+
$ret = 0;
170+
$args = "$msa_flags -o $tmpf.o -x c $tmpf";
171+
my @cmd = ("$compiler_name $args");
172+
system(@cmd) == 0;
173+
if ($? != 0) {
174+
$ret = ($? >> 8);
175+
}
176+
unlink("$tmpf.o");
177+
if($ret != 0) {
178+
$mips_simd = 0;
179+
}
180+
}
181+
155182
$architecture = x86 if ($data =~ /ARCH_X86/);
156183
$architecture = x86_64 if ($data =~ /ARCH_X86_64/);
157184
$architecture = power if ($data =~ /ARCH_POWER/);
@@ -246,6 +273,8 @@ print MAKEFILE "FU=$need_fu\n" if $need_fu ne "";
246273
print MAKEFILE "CROSS_SUFFIX=$cross_suffix\n" if $cross != 0 && $cross_suffix ne "";
247274
print MAKEFILE "CROSS=1\n" if $cross != 0;
248275
print MAKEFILE "CEXTRALIB=$linker_L $linker_l $linker_a\n";
276+
print MAKEFILE "MIPS_SIMD=1\n" if $mips_simd eq 1;
277+
print MAKEFILE "MIPS_SIMD_FLAGS=$msa_flags\n" if $mips_simd eq 1;
249278

250279
$os =~ tr/[a-z]/[A-Z]/;
251280
$architecture =~ tr/[a-z]/[A-Z]/;
@@ -257,6 +286,7 @@ print CONFFILE "#define C_$compiler\t1\n";
257286
print CONFFILE "#define __32BIT__\t1\n" if $binformat eq bin32;
258287
print CONFFILE "#define __64BIT__\t1\n" if $binformat eq bin64;
259288
print CONFFILE "#define FUNDERSCORE\t$need_fu\n" if $need_fu ne "";
289+
print CONFFILE "#define MIPS_SIMD\t1\n" if $mips_simd eq 1;
260290

261291
if ($os eq "LINUX") {
262292

f_check

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,12 @@ if (!$?) {
223223
}
224224
#For gfortran MIPS
225225
if ($?) {
226-
$link = `$compiler $openmp -mabi=32 -v ftest2.f 2>&1 && rm -f a.out a.exe`;
226+
$mips_data = `$compiler_bin -E -dM - < /dev/null`;
227+
if ($mips_data =~ /_MIPS_ISA_MIPS64/) {
228+
$link = `$compiler $openmp -mabi=n32 -v ftest2.f 2>&1 && rm -f a.out a.exe`;
229+
} else {
230+
$link = `$compiler $openmp -mabi=32 -v ftest2.f 2>&1 && rm -f a.out a.exe`;
231+
}
227232
}
228233
$binary = "" if ($?);
229234
}

kernel/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ endif
44

55
TOPDIR = ..
66
include $(TOPDIR)/Makefile.system
7+
include $(TOPDIR)/Makefile.conf
78

89
ifdef TARGET_CORE
910
override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)

0 commit comments

Comments
 (0)