Skip to content

Commit 8fef587

Browse files
authored
Merge pull request #3024 from martin-frbg/sparc
Fix 32 and 64bit builds on SPARC with SolarisStudio compilers
2 parents f216186 + 6c7d557 commit 8fef587

File tree

8 files changed

+56
-17
lines changed

8 files changed

+56
-17
lines changed

Makefile.sparc

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,29 @@ RANLIB = ranlib
33

44
ifdef BINARY64
55

6+
ifeq ($(C_COMPILER), GCC)
67
CCOMMON_OPT += -mcpu=v9 -m64
8+
else
9+
CCOMMON_OPT += -m64
10+
endif
711
ifeq ($(COMPILER_F77), g77)
812
FCOMMON_OPT += -mcpu=v9 -m64
913
endif
10-
ifeq ($(COMPILER_F77), f90)
11-
FCOMMON_OPT += -xarch=v9
14+
ifeq ($(COMPILER_F77), f95)
15+
FCOMMON_OPT += -m64
1216
endif
1317
else
1418

19+
ifeq ($(C_COMPILER), GCC)
1520
CCOMMON_OPT += -mcpu=v9
21+
else
22+
CCOMMON_OPT += -xarch=v9
23+
endif
1624

1725
ifeq ($(COMPILER_F77), g77)
1826
FCOMMON_OPT += -mcpu=v9
1927
endif
20-
ifeq ($(COMPILER_F77), f90)
28+
ifeq ($(COMPILER_F77), f95)
2129
FCOMMON_OPT += -xarch=v8plusb
2230
endif
2331

@@ -37,4 +45,4 @@ LIBSUNPERF = -L/opt/SUNWspro/lib/v9 -L/opt/SUNWspro/prod/lib/v9 \
3745
else
3846
LIBSUNPERF = -L/opt/SUNWspro/lib -L/opt/SUNWspro/prod/lib \
3947
-Wl,-R,/opt/SUNWspro/lib -lsunperf -lompstubs -lfui -lfsu -lsunmath
40-
endif
48+
endif

Makefile.system

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1131,16 +1131,25 @@ CCOMMON_OPT += -w
11311131
ifeq ($(ARCH), x86)
11321132
CCOMMON_OPT += -m32
11331133
else
1134-
FCOMMON_OPT += -m64
1134+
ifdef BINARY64
1135+
CCOMMON_OPT += -m64
1136+
else
1137+
CCOMMON_OPT += -m32
1138+
endif
11351139
endif
11361140
endif
11371141

11381142
ifeq ($(F_COMPILER), SUN)
11391143
CCOMMON_OPT += -DF_INTERFACE_SUN
1144+
FCOMMON_OPT += -ftrap=%none -xrecursive
11401145
ifeq ($(ARCH), x86)
11411146
FCOMMON_OPT += -m32
11421147
else
1148+
ifdef BINARY64
11431149
FCOMMON_OPT += -m64
1150+
else
1151+
FCOMMON_OPT += -m32
1152+
endif
11441153
endif
11451154
ifeq ($(USE_OPENMP), 1)
11461155
FCOMMON_OPT += -xopenmp=parallel
@@ -1313,8 +1322,10 @@ KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
13131322
include $(TOPDIR)/Makefile.$(ARCH)
13141323

13151324
ifneq ($(C_COMPILER), PGI)
1325+
ifneq ($(C_COMPILER), SUN)
13161326
CCOMMON_OPT += -UASMNAME -UASMFNAME -UNAME -UCNAME -UCHAR_NAME -UCHAR_CNAME
13171327
endif
1328+
endif
13181329
CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
13191330

13201331
ifeq ($(CORE), PPC440)

c_check

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
# Checking cross compile
77
$hostos = `uname -s | sed -e s/\-.*//`; chop($hostos);
88
$hostarch = `uname -m | sed -e s/i.86/x86/`;chop($hostarch);
9-
$hostarch = `uname -p` if ($hostos eq "AIX");
9+
$hostarch = `uname -p` if ($hostos eq "AIX" || $hostos eq "SunOS");
10+
chop($hostarch);
1011
$hostarch = "x86_64" if ($hostarch eq "amd64");
1112
$hostarch = "arm" if ($hostarch ne "arm64" && $hostarch =~ /^arm.*/);
1213
$hostarch = "arm64" if ($hostarch eq "aarch64");

common_sparc.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ static __inline unsigned long rpcc(void){
7878
#define __BIG_ENDIAN__
7979
#endif
8080

81+
#ifdef C_SUN
82+
#ifndef __64BIT
83+
#define RETURN_BY_STACK
84+
#endif
85+
#endif
86+
8187
#ifdef DOUBLE
8288
#define GET_IMAGE(res) __asm__ __volatile__("fmovd %%f2, %0" : "=f"(res) : : "memory")
8389
#else

kernel/arm/zdot.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ OPENBLAS_COMPLEX_FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLA
4848

4949
dot[0]=0.0;
5050
dot[1]=0.0;
51-
#if !defined(__PPC__)
51+
#if !defined(__PPC__) && !defined(__SunOS)
5252
CREAL(result) = 0.0 ;
5353
CIMAG(result) = 0.0 ;
5454
#else
@@ -73,7 +73,7 @@ OPENBLAS_COMPLEX_FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLA
7373
i++ ;
7474

7575
}
76-
#if !defined(__PPC__)
76+
#if !defined(__PPC__) && !defined(__SunOS)
7777
CREAL(result) = dot[0];
7878
CIMAG(result) = dot[1];
7979
#else

kernel/sparc/KERNEL.sparc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,13 @@ ZTRSMKERNEL_LN = ztrsm_kernel_LN.S
5454
ZTRSMKERNEL_LT = ztrsm_kernel_LT.S
5555
ZTRSMKERNEL_RN = ztrsm_kernel_LT.S
5656
ZTRSMKERNEL_RT = ztrsm_kernel_RT.S
57+
58+
59+
SDOTKERNEL = ../generic/dot.c
60+
SDSDOTKERNEL = ../generic/dot.c
61+
DSDOTKERNEL = ../generic/dot.c
62+
DDOTKERNEL = ../generic/dot.c
63+
CDOTKERNEL = ../arm/zdot.c
64+
ZDOTKERNEL = ../arm/zdot.c
65+
CSWAPKERNEL = ../arm/zswap.c
66+
ZSWAPKERNEL = ../arm/zswap.c

param.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,22 +1454,22 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14541454

14551455
#define SGEMM_DEFAULT_P 768
14561456
#define SGEMM_DEFAULT_R sgemm_r
1457-
//#define SGEMM_DEFAULT_R 1024
1457+
/*#define SGEMM_DEFAULT_R 1024*/
14581458

14591459
#define DGEMM_DEFAULT_P 512
14601460
#define DGEMM_DEFAULT_R dgemm_r
1461-
//#define DGEMM_DEFAULT_R 1024
1461+
/*#define DGEMM_DEFAULT_R 1024*/
14621462

14631463
#define QGEMM_DEFAULT_P 504
14641464
#define QGEMM_DEFAULT_R qgemm_r
14651465

14661466
#define CGEMM_DEFAULT_P 768
14671467
#define CGEMM_DEFAULT_R cgemm_r
1468-
//#define CGEMM_DEFAULT_R 1024
1468+
/*#define CGEMM_DEFAULT_R 1024*/
14691469

14701470
#define ZGEMM_DEFAULT_P 512
14711471
#define ZGEMM_DEFAULT_R zgemm_r
1472-
//#define ZGEMM_DEFAULT_R 1024
1472+
/*#define ZGEMM_DEFAULT_R 1024*/
14731473

14741474
#define XGEMM_DEFAULT_P 252
14751475
#define XGEMM_DEFAULT_R xgemm_r
@@ -2571,7 +2571,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25712571
#endif
25722572

25732573
#ifdef LOONGSON3A
2574-
////Copy from SICORTEX
2574+
/*Copy from SICORTEX*/
25752575
#define SNUMOPT 2
25762576
#define DNUMOPT 2
25772577

@@ -2863,7 +2863,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28632863
#define SYMV_P 16
28642864
#endif
28652865

2866-
// Common ARMv8 parameters
2866+
/* Common ARMv8 parameters */
28672867
#if defined(ARMV8)
28682868

28692869
#define SNUMOPT 2
@@ -3066,7 +3066,7 @@ is a big desktop or server with abundant cache rather than a phone or embedded d
30663066
#define CGEMM_DEFAULT_R 4096
30673067
#define ZGEMM_DEFAULT_R 4096
30683068

3069-
#else // Other/undetected ARMv8 cores
3069+
#else /* Other/undetected ARMv8 cores */
30703070

30713071
#define SGEMM_DEFAULT_UNROLL_M 16
30723072
#define SGEMM_DEFAULT_UNROLL_N 4
@@ -3095,9 +3095,9 @@ is a big desktop or server with abundant cache rather than a phone or embedded d
30953095
#define CGEMM_DEFAULT_R 4096
30963096
#define ZGEMM_DEFAULT_R 4096
30973097

3098-
#endif // Cores
3098+
#endif /* Cores */
30993099

3100-
#endif // ARMv8
3100+
#endif /* ARMv8 */
31013101

31023102
#if defined(ARMV5)
31033103
#define SNUMOPT 2

utest/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ endif
3535
ifeq ($(C_COMPILER), PGI)
3636
OBJS = utest_main2.o
3737
endif
38+
ifeq ($(C_COMPILER), SUN)
39+
OBJS = utest_main2.o
40+
endif
3841
ifeq ($(OSNAME), AIX)
3942
OBJS = utest_main2.o
4043
endif

0 commit comments

Comments
 (0)