diff --git a/Makefile b/Makefile
index 25fedf56192b9f45dfef2da09816ac609a1808f9..96c6c2019743021d968614c336ded9e7ea2c40bd 100755
--- a/Makefile
+++ b/Makefile
@@ -26,6 +26,11 @@ PROC=k8
 #PROC=athlon
 OPTIONS+=-m64
 endif
+ifeq ($(PROC),sparc64)
+PROC=ultrasparc
+CFLAGS+=$(shell if $(CC) -mtune=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-mtune=$(PROC)"; fi)
+endif
+
 endif
 
 ifeq ($(findstring BSD,${OSARCH}),BSD)
@@ -116,7 +121,11 @@ AGI_DIR=$(ASTVARLIBDIR)/agi-bin
 INCLUDE=-Iinclude -I../include
 CFLAGS=-pipe  -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) -D_REENTRANT -D_GNU_SOURCE #-DMAKE_VALGRIND_HAPPY
 CFLAGS+=$(OPTIMIZE)
+
+ifneq ($(PROC),ultrasparc)
 CFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
+endif
+
 CFLAGS+=$(shell if uname -m | grep -q ppc; then echo "-fsigned-char"; fi)
 CFLAGS+=$(shell if [ -f /usr/include/osp/osp.h ]; then echo "-DOSP_SUPPORT -I/usr/include/osp" ; fi)
 
diff --git a/codecs/gsm/Makefile b/codecs/gsm/Makefile
index 9105ef4f395d938473c428467f9d758d866377f8..572f61e128a35fe4cb8e923cba8bfd55c86ccab5 100755
--- a/codecs/gsm/Makefile
+++ b/codecs/gsm/Makefile
@@ -39,6 +39,7 @@ WAV49	= -DWAV49
 
 ifneq (${OSARCH},Darwin)
 ifneq (${PROC},x86_64)
+ifneq (${PROC},ultrasparc)
 ifneq ($(shell uname -m),ppc)
 ifneq ($(shell uname -m),alpha)
 OPTIMIZE+=-march=$(PROC)
@@ -46,6 +47,7 @@ endif
 endif
 endif
 endif
+endif
 
 PG =
 #PG = -g -pg
@@ -203,7 +205,9 @@ ifeq (${OSARCH},Linux)
 ifneq ($(shell uname -m),x86_64)
 ifneq ($(shell uname -m),ppc)
 ifneq ($(shell uname -m),alpha)
-GSM_SOURCES+=	$(SRC)/k6opt.s
+ifneq ($(shell uname -m),sparc64)
+GSM_SOURCES+= $(SRC)/k6opt.s
+endif
 endif
 endif
 endif
@@ -252,11 +256,14 @@ GSM_OBJECTS =	$(SRC)/add.o		\
 		$(SRC)/gsm_option.o	\
 		$(SRC)/short_term.o	\
 		$(SRC)/table.o
+
 ifeq (${OSARCH},Linux)
 ifneq ($(shell uname -m), x86_64)
 ifneq ($(shell uname -m), ppc)
 ifneq ($(shell uname -m), alpha)
-GSM_OBJECTS+=	$(SRC)/k6opt.o
+ifneq ($(shell uname -m), sparc64)
+GSM_OBJECTS+= $(SRC)/k6opt.o
+endif
 endif
 endif
 endif
diff --git a/codecs/lpc10/Makefile b/codecs/lpc10/Makefile
index cd1e973ef7d04aa1e4b1cedbaa7664d94d680963..f747e64a5b0e3ce910de19b3c168e1378d3c1f64 100755
--- a/codecs/lpc10/Makefile
+++ b/codecs/lpc10/Makefile
@@ -25,13 +25,17 @@ WARNINGS = -Wall -Wno-comment -Wno-error
 CFLAGS += $(OPTIMIZE) -I$(LIB_TARGET_DIR) $(WARNINGS) -fPIC
 #CFLAGS+= $(shell if uname -m | grep -q 86; then echo "-mpentium" ; fi)
 
-#fix for PPC processors and ALPHA too
+#fix for PPC processors and ALPHA, And UltraSparc too
 ifneq ($(OSARCH),Darwin)
 ifneq ($(findstring BSD,${OSARCH}),BSD)
 ifneq ($(PROC),ppc)
 ifneq ($(PROC),x86_64)
 ifneq ($(PROC),alpha)
-	CFLAGS+= -march=$(PROC)
+ifeq ($(PROC),ultrasparc)
+        CFLAGS+= -mtune=$(PROC)
+else
+        CFLAGS+= -march=$(PROC)
+endif
 endif
 endif
 endif