;;; This file is part of GNU epsilon, a functional language implementation

;;; Copyright (C) 2003 Luca Saiu

;;; GNU epsilon is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published
;;; by the Free Software Foundation; either version 2, or (at your
;;; option) any later version.

;;; GNU epsilon is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;;; General Public License for more details.

;;; You should have received a copy of the GNU General Public License
;;; along with epsilon; see the file COPYING.  If not, write to the
;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;;; Boston, MA 02111-1307, USA.


;;; Code for the s_pshf instruction

(let* (;;; The environment without the s-link
       (nearly-environment (do ((built-environment (make-vector (1+ integer-parameter-1)))
				(i integer-parameter-1 (1- i)))
			       ((= i 0) built-environment)
			     (vector-set! built-environment i (pop-stack))))
       (new-environment (begin
			  (vector-set! nearly-environment 0 environment); s-link
			  nearly-environment)))
  (enlarge-stack (+ stack-pointer instructions-number))
  (push-stack frame-pointer) ; saved frame-pointer
  (set! frame-pointer stack-pointer) ; the new frame begins here
  (push-stack environment) ; saved environment
  (set! environment new-environment)
  (1+ instruction-pointer))
