From c152a399a48d5e3ca8ced205c4fae3ec7d046d90 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Mon, 2 Aug 2004 16:23:54 +0000 Subject: [PATCH] 0.8.13.18: * add some new Alpha instructions * provide a better LOGCOUNT for Alpha * stop GENESIS from complaining about duplicate functions on Alpha/Tru64 --- src/compiler/alpha/arith.lisp | 12 ++++++++++++ src/compiler/alpha/insts.lisp | 10 +++++++++- src/runtime/Config.alpha-osf1 | 7 ++++++- version.lisp-expr | 2 +- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/compiler/alpha/arith.lisp b/src/compiler/alpha/arith.lisp index f20275f..df7d563 100644 --- a/src/compiler/alpha/arith.lisp +++ b/src/compiler/alpha/arith.lisp @@ -298,6 +298,18 @@ (:arg-types unsigned-num) (:results (res :scs (unsigned-reg))) (:result-types positive-fixnum) + (:guard (member :cix *backend-subfeatures*)) + (:generator 1 + (inst ctpop zero arg res))) + +(define-vop (unsigned-byte-64-count) + (:translate logcount) + (:note "inline (unsigned-byte 64) logcount") + (:policy :fast-safe) + (:args (arg :scs (unsigned-reg) :target num)) + (:arg-types unsigned-num) + (:results (res :scs (unsigned-reg))) + (:result-types positive-fixnum) (:temporary (:scs (non-descriptor-reg) :from (:argument 0) :to (:result 0) :target res) num) (:temporary (:scs (non-descriptor-reg)) mask temp) diff --git a/src/compiler/alpha/insts.lisp b/src/compiler/alpha/insts.lisp index 8985a46..bc91214 100644 --- a/src/compiler/alpha/insts.lisp +++ b/src/compiler/alpha/insts.lisp @@ -199,11 +199,15 @@ disp))))) (define-memory lda #x08 :lda) (define-memory ldah #x09 :ldah) + (define-memory ldbu #x0a) ; BWX extension + (define-memory ldwu #x0c) ; BWX extension (define-memory ldl #x28) (define-memory ldq #x29) (define-memory ldl_l #x2a) (define-memory ldq_q #x2b) (define-memory ldq_u #x0b) + (define-memory stw #x0d) ; BWX extension + (define-memory stb #x0e) ; BWX extension (define-memory stl #x2c) (define-memory stq #x2d) (define-memory stl_c #x2e) @@ -357,7 +361,11 @@ (define-operate mulq/v #x13 #x60) (define-operate mull/v #x13 #x40) (define-operate umulh #x13 #x30) - (define-operate mulq #x13 #x20)) + (define-operate mulq #x13 #x20) + + (define-operate ctpop #x1c #x30) ; CIX extension + (define-operate ctlz #x1c #x32) ; CIX extension + (define-operate cttz #x1c #x33)) ; CIX extension (macrolet ((define-fp-operate (name op fn &optional (args 3)) diff --git a/src/runtime/Config.alpha-osf1 b/src/runtime/Config.alpha-osf1 index 675a566..a7721c1 100644 --- a/src/runtime/Config.alpha-osf1 +++ b/src/runtime/Config.alpha-osf1 @@ -11,7 +11,12 @@ CFLAGS += -Dalpha -Dosf1 -O0 -g -D_XOPEN_SOURCE=500 -D_OSF_SOURCE=500 ASFLAGS += -Dalpha -Dosf1 #-ULANGUAGE_ASSEMBLY LD = ld -taso LINKFLAGS = -non_shared # dynamic -v -g -Wl,-T -Wl,ld-script.alpha-linux -NM = nm -B +# Digital^WCompaq^WHP's cc declares `static inline' functions to exist +# in multiple places in the binary; we add the '-g' flag to suppress all +# internal (i.e. static) function names being spat out. GENESIS +# complains about the multiple references and they aren't referenceable +# by anything outside the binary anyway. +NM = nm -B -g ASSEM_SRC = alpha-assem.s # ldso-stubs.s ARCH_SRC = alpha-arch.c undefineds.c diff --git a/version.lisp-expr b/version.lisp-expr index fa06b52..b94abc4 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.13.17" +"0.8.13.18" -- 1.7.10.4