Skip to content
Snippets Groups Projects
Commit 0da9ad68 authored by pmai's avatar pmai
Browse files

Fixes by Brian Uhrain for the alpha port:

  Attached is the full patch containing the addition of the
  ISTREAM-MEMORY-BARRIER VOP, the change to GENTRAP to use the bugchk
  opcode, and also a boot file to allow the patched sources to be
  compiled with an unpatched binary.
parent 2edf2d25
No related branches found
No related tags found
No related merge requests found
; This file is only needed when compiling for the Alpha under Linux, to add the
; new Alpha-only ISTREAM-MEMORY-BARRIER VOP.
(in-package "ALPHA")
(define-instruction imb (segment)
(:emitter (emit-pal segment 0 #x000086)))
(define-vop (c::istream-memory-barrier)
(:generator 1
(inst imb)))
......@@ -5,11 +5,11 @@
;;; Carnegie Mellon University, and has been placed in the public domain.
;;;
(ext:file-comment
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/alpha-vm.lisp,v 1.3 2002/11/19 13:17:13 toy Exp $")
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/alpha-vm.lisp,v 1.4 2003/03/06 14:13:07 pmai Exp $")
;;;
;;; **********************************************************************
;;;
;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/alpha-vm.lisp,v 1.3 2002/11/19 13:17:13 toy Exp $
;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/alpha-vm.lisp,v 1.4 2003/03/06 14:13:07 pmai Exp $
;;;
;;; This file contains the Alpha specific runtime stuff.
;;;
......@@ -236,4 +236,4 @@
;;;
(defun sanctify-for-execution (component)
(declare (ignore component))
nil)
(%primitive istream-memory-barrier))
......@@ -5,7 +5,7 @@
;;; Carnegie Mellon University, and has been placed in the public domain.
;;;
(ext:file-comment
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/alpha/insts.lisp,v 1.4 1997/06/07 19:04:39 pw Exp $")
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/alpha/insts.lisp,v 1.5 2003/03/06 14:13:08 pmai Rel $")
;;;
;;; **********************************************************************
;;;
......@@ -440,14 +440,26 @@
(define-instruction excb (segment)
(:emitter (emit-lword segment #x63ff0400)))
(define-instruction trapb (segment)
(:emitter (emit-lword segment #x63ff0000)))
(define-instruction imb (segment)
(:emitter (emit-pal segment 0 #x000086)))
(define-instruction gentrap (segment code)
(:printer call-pal ((palcode #xaa0000)))
(:emitter
(emit-pal segment 0 #x0000aa)
; BAU: This *might* cause troubles on Alphas that only have ARC firmware,
; as the Alpha Architecture Handbook lists the bugchk PALcode instruction
; only for the OpenVMS/Digital UNIX PALcode (SRM firmware), but not for
; the Windows NT PALcode (ARC firmware) (see p. C-19 in the AAH,
; opcode 00.0081)
; Oddly enough, even though the gentrap instruction is defined for all
; three PALcode instruction sets, Eric Marsden noticed that it was not
; working as expected under some PALcode setups.
(emit-pal segment 0 #x000081) ; actually bugchk PALcode instruction
;; (emit-pal segment 0 #x0000aa) ; gentrap PALcode instruction
(emit-lword segment code)))
(define-instruction-macro move (src dst)
......
......@@ -5,7 +5,7 @@
;;; Carnegie Mellon University, and has been placed in the public domain.
;;;
(ext:file-comment
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/alpha/system.lisp,v 1.2 1994/10/31 04:39:51 ram Exp $")
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/alpha/system.lisp,v 1.3 2003/03/06 14:13:08 pmai Rel $")
;;;
;;; **********************************************************************
;;;
......@@ -237,6 +237,12 @@
(:generator 1
(inst gentrap halt-trap)))
(defknown istream-memory-barrier () (values))
(define-vop (c::istream-memory-barrier)
(:translate istream-memory-barrier)
(:generator 1
(inst imb)))
;;;; Dynamic vop count collection support
......
/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/alpha-assem.S,v 1.9 2002/08/23 17:01:00 pmai Exp $ */
/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/alpha-assem.S,v 1.10 2003/03/06 14:13:09 pmai Rel $ */
#ifndef __linux__
#include <machine/regdef.h>
#include <machine/pal.h>
......@@ -60,10 +60,9 @@ call_into_lisp:
ldl reg_OCFP,current_control_frame_pointer
mov a1,reg_CFP
#ifndef __linux__
.set noat
#endif
ldil reg_L2,0
.set at
/* End of pseudo-atomic. */
/* Establish lisp arguments. */
......@@ -188,8 +187,10 @@ call_into_c:
mov reg_ZERO, reg_A4
mov reg_ZERO, reg_A5
mov reg_ZERO, reg_L0
.set noat
mov reg_ZERO, reg_L2
.set at
/* Turn on pseudo-atomic. */
lda reg_ALLOC,1(reg_ZERO)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment