(FILECREATED " 3-Apr-86 07:28:36" {ERIS}<TAMARIN>WORK>SIMULATE>TEFNS.;31 23942  

      changes to:  (FNS TE.GETPTR.N TE.PUTPTR.N TE.CAR TE.CDR TE.ADDBASE TE.VARK← TE.PUTBASEBYTE 
			TE.ASH TE.TYPEP.O TE.IPLUS TE.IDIFFERENCE TE.ITIMES TE.IQUOTIENT 
			TE.IREMAINDER TE.NEG)

      previous date: "25-Mar-86 08:14:23" {ERIS}<TAMARIN>WORK>SIMULATE>TEFNS.;24)


(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT TEFNSCOMS)

(RPAQQ TEFNSCOMS ((FNS (* * CONSTANTS)
			 TE.'T TE.'NIL TE.'0 TE.'1 TE.'UNBIND TE.SICX TE.ACONST TE.PCONST TE.ICONST 
			 TE.FCONST (* * PROCEDURE CALLING AND RETURNING)
			 TE.FN0 TE.FN1 TE.FN2 TE.FN3 TE.FN4 TE.FN5 TE.FN6 TE.FN7 TE.APPLYFN TE.RETURN 
			 TE.MYALINK TE.MYCLINK TE.MYCLINK← TE.CONTEXTSWITCH TE.DISINT TE.ENBINT (*
			   * JUMP INSTRUCTIONS)
			 TE.JUMPK TE.JUMPX TE.JUMPXX TE.TJUMPK TE.TJUMPX TE.FJUMPK TE.FJUMPX TE.NOP (
			   * * INTEGER ARITHMETIC OPERATIONS)
			 TE.PLUS TE.DIFFERENCE TE.TIMES TE.QUOTIENT TE.IPLUS TE.IDIFFERENCE TE.ITIMES 
			 TE.IQUOTIENT TE.IREMAINDER (* * INTEGER SHIFTS)
			 TE.LLSH.N TE.LRSH.N TE.ASH (* * LOGICAL INTEGER OPERATIONS)
			 TE.LOGOR TE.LOGXOR TE.LOGAND (* * COMPARISONS)
			 TE.EQ TE.EQL TE.EQUAL TE.GREATERP TE.IGREATERP (* * VARIABLE REFERENCING)
			 TE.VARK TE.VARX TE.VARK← TE.VARX← TE.VARK←NIL TE.VARK←UNBIND TE.FVARX 
			 TE.FVARX← TE.FVARM TE.FVARM← TE.GVAR TE.GVAR← TE.VARM TE.VARM← (* * 
										       ADDRESSING 
											 ROUTINES)
			 TE.ADDBASE TE.GETPTR.N TE.PUTPTR.N TE.RPLPTR.N TE.GETBASEBYTE TE.PUTBASEBYTE 
(* * STACK OPERATIONS)
			 TE.COPY TE.POP TE.DUMMY TE.DUNBIND TE.UNBIND (* * UNARY STACK INSTRUCTIONS)
			 TE.NEG TE.CAR TE.CDR TE.LISTP TE.INTEGERP TE.POINTERP TE.FLOATP TE.NUMBERP 
			 TE.TYPEP.N TE.TYPEP.O TE.DTEST.O TE.NTYPE TE.SETTYPE.N TE.SETSUBTYP.N (*
			   * TESTING ROUTINES)
			 TFUN.GETREGABS
			 (* *))))
(DEFINEQ

(TE.'T
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:16")
    TS.TCONST])

(TE.'NIL
  [LAMBDA NIL                                                (* edited: "11-Mar-86 13:18")
    TS.NILCONST])

(TE.'0
  [LAMBDA NIL                                                (* edited: "11-Mar-86 13:18")
    (TS.NEWTINT 0])

(TE.'1
  [LAMBDA NIL                                                (* edited: "11-Mar-86 13:18")
    (TS.NEWTINT 1])

(TE.'UNBIND
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:18")
    TS.UNBINDCONST])

(TE.SICX
  [LAMBDA (C)                                                (* edited: "11-Mar-86 13:18")
    (TS.NEWTINT C])

(TE.ACONST
  [LAMBDA (ATOM#)                                            (* edited: "12-Mar-86 10:42")

          (* * Make Atom type from Atom number given)


    (TS.NEWTPTR TS.ATOMSUBTYP ATOM#])

(TE.PCONST
  [LAMBDA (PTR)                                              (* edited: "12-Mar-86 10:13")

          (* * Make new pointer. For now assuming that all pointer type information is in the 4 bytes of the code stream)


    PTR])

(TE.ICONST
  [LAMBDA (INT)                                              (* edited: "12-Mar-86 10:14")

          (* * This assumes that INT in the code stream does NOT have type bits set)


    (TS.NEWTINT INT])

(TE.FCONST
  [LAMBDA (FLOAT)                                            (* edited: "12-Mar-86 10:41")
    (TS.NEWTFLOAT FLOAT])

(TE.FN0
  [LAMBDA (FN)                                               (* rtk "26-Feb-86 16:39")
    (TS.TAMFUNCTIONCALL FN 0])

(TE.FN1
  [LAMBDA (P1 FN)                                            (* edited: "11-Mar-86 15:37")
    (TS.TAMFUNCTIONCALL FN 1])

(TE.FN2
  [LAMBDA (P1 P2 FN)                                         (* edited: "11-Mar-86 15:36")
    (TS.TAMFUNCTIONCALL FN 2])

(TE.FN3
  [LAMBDA (P1 P2 P3 FN)                                      (* edited: "11-Mar-86 15:36")
    (TS.TAMFUNCTIONCALL FN 3])

(TE.FN4
  [LAMBDA (P1 P2 P3 P4 FN)                                   (* edited: "11-Mar-86 15:35")
    (TS.TAMFUNCTIONCALL FN 4])

(TE.FN5
  [LAMBDA (P1 P2 P3 P4 P5 FN)                                (* edited: "11-Mar-86 15:35")
    (TS.TAMFUNCTIONCALL FN 5])

(TE.FN6
  [LAMBDA (P1 P2 P3 P4 P5 P6 FN)                             (* edited: "11-Mar-86 15:35")
    (TS.TAMFUNCTIONCALL FN 6])

(TE.FN7
  [LAMBDA (P1 P2 P3 P4 P5 P6 P7 FN)                          (* edited: "11-Mar-86 15:37")
    (TS.TAMFUNCTIONCALL FN 7])

(TE.APPLYFN
  [LAMBDA NIL                                                (* edited: "10-Mar-86 16:17")
    (BREAK1 NIL T (APPLAYFN not implemented yet)
	    NIL])

(TE.RETURN
  [LAMBDA NIL                                                (* rtk "26-Feb-86 14:44")
    (TS.TAMFUNCTIONRETURN])

(TE.MYALINK
  [LAMBDA NIL                                                (* rtk "25-Mar-86 07:12")
    (TS.PUNTPREVIOUSFRAMES (WINDOWPROP TS.MAINWINDOW (QUOTE CURRENTEXECFRAME)))
    (FETCH (TFRAME ALINK) OF STACKFRAME])

(TE.MYCLINK
  [LAMBDA NIL                                                (* edited: "14-Mar-86 16:55")
    (TS.PUNTPREVIOUSFRAMES (WINDOWPROP TS.MAINWINDOW (QUOTE CURRENTEXECFRAME)))
    (fetch (TFRAME CLINK) of STACKFRAME])

(TE.MYCLINK←
  [LAMBDA (X)                                                (* rtk "25-Mar-86 07:11")
    (TS.PUNTPREVIOUSFRAMES (WINDOWPROP TS.MAINWINDOW (QUOTE CURRENTEXECFRAME)))
    (REPLACE (TFRAME CLINK) OF STACKFRAME WITH X])

(TE.CONTEXTSWITCH
  [LAMBDA NIL                                                (* rtk "24-Mar-86 18:07")
    NIL])

(TE.DISINT
  [LAMBDA NIL                                                (* rtk "24-Mar-86 18:07")
    NIL])

(TE.ENBINT
  [LAMBDA NIL                                                (* rtk "24-Mar-86 18:08")
    NIL])

(TE.JUMPK
  [LAMBDA NIL                                                (* rtk "24-Mar-86 18:05")
    (TS.PUTFRAMEPROP STACKFRAME (QUOTE PC)
		     (IPLUS (TS.GETFRAMEPROP STACKFRAME (QUOTE PC))
			    (TS.GETOPCODEOFFSET)
			    1])

(TE.JUMPX
  [LAMBDA (OFFSETBYTE)                                       (* rtk "26-Feb-86 17:14")
    (TS.PUTFRAMEPROP STACKFRAME (QUOTE PC)
		     (IDIFFERENCE (IPLUS (TS.GETFRAMEPROP STACKFRAME (QUOTE PC))
					 (RSH (LLSH OFFSETBYTE 24)
					      24))
				  2])

(TE.JUMPXX
  [LAMBDA (WORDOFFSET)                                       (* edited: "10-Mar-86 16:25")
    (TS.PUTFRAMEPROP STACKFRAME (QUOTE PC)
		     (IDIFFERENCE (IPLUS (TS.GETFRAMEPROP STACKFRAME (QUOTE PC))
					 (RSH (LLSH WORDOFFSET 16)
					      16))
				  3])

(TE.TJUMPK
  [LAMBDA (VAL)                                              (* rtk "24-Mar-86 18:06")
    (if (EQP VAL TS.NILCONST)
	then NIL
      else (TE.JUMPK])

(TE.TJUMPX
  [LAMBDA (VAL OFFSETBYTE)                                   (* edited: " 7-Mar-86 16:52")
    (IF (EQUAL VAL TS.NILCONST)
	THEN NIL
      ELSE (TE.JUMPX OFFSETBYTE])

(TE.FJUMPK
  [LAMBDA (VAL)                                              (* rtk "24-Mar-86 18:06")
    (if (EQP VAL TS.NILCONST)
	then (TE.JUMPK)
      else NIL])

(TE.FJUMPX
  [LAMBDA (VAL OFFSETBYTE)                                   (* edited: " 7-Mar-86 16:52")
    (if (EQUAL VAL TS.NILCONST)
	then (TE.JUMPX OFFSETBYTE)
      else NIL])

(TE.NOP
  [LAMBDA NIL                                                (* rtk "24-Mar-86 18:01")
    (FOR I FROM 1 TO (TS.GETOPCODEOFFSET) DO (TS.FETCH])

(TE.PLUS
  [LAMBDA (A1 A2)                                            (* rtk "25-Mar-86 07:14")

          (* * Same as IPLUS except UFN does not coerce to integer)


    (TE.IPLUS A1 A2])

(TE.DIFFERENCE
  [LAMBDA (A1 A2)                                            (* rtk "25-Mar-86 07:15")

          (* * Same as IDIFFERENCE except UFN does not coerce to integer)


    (IDIFFERENCE A1 A2])

(TE.TIMES
  [LAMBDA (A1 A2)                                            (* rtk "25-Mar-86 07:16")

          (* * Same as ITIMES except UFN does not coerce to integer)


    (ITIMES A1 A2])

(TE.QUOTIENT
  [LAMBDA (A1 A2)                                            (* rtk "25-Mar-86 07:17")

          (* * Same as IQUOTIENT except UFN does not coerce to integer)


    (IQUOTIENT A1 A2])

(TE.IPLUS
  [LAMBDA (A1 A2)                                            (* rtk "27-Mar-86 16:04")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if (AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2))
	then [PROG [(X (IPLUS (TTOD A1)
				(TTOD A2]
		     (RETURN (if (AND (GEQ TS.MAXINT X)
					(LEQ TS.MININT X))
				 then (TS.NEWTINT X)
			       else (TS.UFNCALL]
      else (TS.UFNCALL])

(TE.IDIFFERENCE
  [LAMBDA (A1 A2)                                            (* rtk "27-Mar-86 16:06")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if (AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2))
	then [PROG [(X (IDIFFERENCE (TTOD A1)
				      (TTOD A2]
		     (RETURN (if (AND (GEQ TS.MAXINT X)
					(LEQ TS.MININT X))
				 then (TS.NEWTINT X)
			       else (TS.UFNCALL]
      else (TS.UFNCALL])

(TE.ITIMES
  [LAMBDA (A1 A2)                                            (* rtk "27-Mar-86 16:06")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if (AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2))
	then [PROG [(X (ITIMES (TTOD A1)
				 (TTOD A2]
		     (RETURN (IF (AND (GEQ TS.MAXINT X)
					(LEQ TS.MININT X))
				 THEN (TS.NEWTINT X)
			       ELSE (TS.UFNCALL]
      else (TS.UFNCALL])

(TE.IQUOTIENT
  [LAMBDA (A1 A2)                                            (* rtk "27-Mar-86 16:10")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if [AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2)
	       (NOT (ZEROP (TTOD A2]
	then 

          (* * overflow possible on minint / -1 = maxint + 1)


	       [PROG [(X (IQUOTIENT (TTOD A1)
				    (TTOD A2]
		     (RETURN (IF (AND (GEQ TS.MAXINT X)
					(LEQ TS.MININT X))
				 THEN (TS.NEWTINT X)
			       ELSE (TS.UFNCALL]
      else (TS.UFNCALL])

(TE.IREMAINDER
  [LAMBDA (A1 A2)                                            (* rtk "27-Mar-86 16:10")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if [AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2)
	       (NOT (ZEROP (TTOD A2]
	then 

          (* * Overflow possible with REM: -1 & minint = maxint + 1)


	       [PROG [(X (IREMAINDER (TTOD A1)
				     (TTOD A2]
		     (RETURN (IF (AND (GEQ TS.MAXINT X)
					(LEQ TS.MININT X))
				 THEN (TS.NEWTINT X)
			       ELSE (TS.UFNCALL]
      else (TS.UFNCALL])

(TE.LLSH.N
  [LAMBDA (A1 ALPHA)                                         (* rtk "24-Mar-86 17:48")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if (TS.INTEGERP A1)
	then (TS.NEWTINT (LLSH (fetch (TCELL INT) of A1)
				 ALPHA))
      else (TS.UFNCALL])

(TE.LRSH.N
  [LAMBDA (A1 ALPHA)                                         (* rtk "24-Mar-86 17:49")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if (TS.INTEGERP A1)
	then (TS.NEWTINT (LRSH (fetch (TCELL INT) of A1)
				 ALPHA))
      else (TS.UFNCALL])

(TE.ASH
  [LAMBDA (A1 A2)                                            (* rtk "27-Mar-86 17:56")
    (if (AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2))
	then (TS.NEWTINT (LSH (TTOD A1)
				(TTOD A2)))
      else (TS.UFNCALL])

(TE.LOGOR
  [LAMBDA (A1 A2)                                            (* rtk "24-Mar-86 17:53")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if (AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2))
	then (TS.NEWTINT (LOGOR (fetch (TCELL INT) of A1)
				  (fetch (TCELL INT) of A2)))
      else (TS.UFNCALL])

(TE.LOGXOR
  [LAMBDA (A1 A2)                                            (* rtk "24-Mar-86 17:53")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if (AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2))
	then (TS.NEWTINT (LOGXOR (fetch (TCELL INT) of A1)
				   (fetch (TCELL INT) of A2)))
      else (TS.UFNCALL])

(TE.LOGAND
  [LAMBDA (A1 A2)                                            (* rtk "24-Mar-86 17:54")

          (* * Check types; if OK, do operation in D-world (fetch converts INT field to D-integer) then reconvert and return)


    (if (AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2))
	then (TS.NEWTINT (LOGAND (fetch (TCELL INT) of A1)
				   (fetch (TCELL INT) of A2)))
      else (TS.UFNCALL])

(TE.EQ
  [LAMBDA (A1 A2)                                            (* edited: "11-Mar-86 15:57")
    (DTOT (EQP A1 A2])

(TE.EQL
  [LAMBDA (A1 A2)                                            (* rtk "25-Mar-86 07:22")
    (IF (EQP A1 A2)
	THEN TS.TCONST
      ELSEIF (AND (TS.NUMBERP A1)
		    (TS.NUMBERP A2))
	THEN (TS.UFNCALL)
      ELSE TS.NILCONST])

(TE.EQUAL
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:40")
    NIL])

(TE.GREATERP
  [LAMBDA (A1 A2)                                            (* rtk "25-Mar-86 07:24")

          (* * Same as IGREATERP except UFN does not coerce to integers before comparison)


    (TE.IGREATERP A1 A2])

(TE.IGREATERP
  [LAMBDA (A1 A2)                                            (* rtk "25-Mar-86 07:23")
    (if (AND (TS.INTEGERP A1)
	       (TS.INTEGERP A2))
	then (if (IGREATERP (fetch (TCELL INT) of A1)
				(fetch (TCELL INT) of A2))
		   then TS.TCONST
		 else TS.NILCONST)
      else (TS.UFNCALL])

(TE.VARK
  [LAMBDA NIL                                                (* edited: "11-Mar-86 13:45")
    (TE.VARX (TS.GETOPCODEOFFSET])

(TE.VARX
  [LAMBDA (OFFSET)                                           (* edited: "11-Mar-86 13:22")
    (TS.VARREF OFFSET])

(TE.VARK←
  [LAMBDA (TOS)                                              (* rtk " 1-Apr-86 07:32")
    (TE.VARX← TOS (TS.GETOPCODEOFFSET])

(TE.VARX←
  [LAMBDA (TOS OFFSET)                                       (* edited: "11-Mar-86 13:45")
    (TS.VARSTORE OFFSET TOS])

(TE.VARK←NIL
  [LAMBDA NIL                                                (* rtk " 7-Mar-86 12:04")
    (TS.VARSTORE (TS.GETOPCODEOFFSET)
		 TS.NILCONST])

(TE.VARK←UNBIND
  [LAMBDA NIL                                                (* rtk " 7-Mar-86 12:04")
    (TS.VARSTORE (TS.GETOPCODEOFFSET)
		 TS.UNBINDCONST])

(TE.FVARX
  [LAMBDA (OFFSET)                                           (* edited: "14-Mar-86 18:07")
    (if (TS.UNBOUNDP (TS.VARREF OFFSET))
	then (TS.UFNCALL)
      else (TMEM.GETMEM (TS.VARREF OFFSET])

(TE.FVARX←
  [LAMBDA (TOS OFFSET)                                       (* edited: "14-Mar-86 18:20")
    (if (TS.UNBOUNDP (TS.VARREF OFFSET))
	then (TS.UFNCALL)
      else (TMEM.SETMEM (TS.VARREF OFFSET)
			  TOS))
    TOS])

(TE.FVARM
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:22")
    NIL])

(TE.FVARM←
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:22")
    NIL])

(TE.GVAR
  [LAMBDA (ATOM#)                                            (* edited: "11-Mar-86 13:48")

          (* * Global values for T-atoms stored as T-GVAL property of D-atom)


    (IF (FMEMB (QUOTE T-GVAL)
		 (PROPNAMES (\INDEXATOMVAL ATOM#)))
	THEN (GETPROP (\INDEXATOMVAL ATOM#)
			(QUOTE T-GVAL))
      ELSE (BREAK1 NIL T (Unbound Global Atom in T\GVAR)
		     NIL])

(TE.GVAR←
  [LAMBDA (TOS ATOM#)                                        (* edited: "11-Mar-86 13:49")
    (PUTPROP (\INDEXATOMVAL ATOM#)
	     (QUOTE T-GVAL)
	     TOS])

(TE.VARM
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:24")
    NIL])

(TE.VARM←
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:24")
    NIL])

(TE.ADDBASE
  [LAMBDA (X D)                                              (* rtk " 2-Apr-86 16:18")
    (if (TS.POINTERP X)
	then (PROG (VAL)
		     [SETQ VAL (IPLUS (if (EVENP (fetch (TCELL PTR) of X))
					  then (fetch (TCELL PTR) of X)
					else (BREAK1 NIL T (Pointer is Odd in TE.ADDBASE)
						       NIL))
				      (if (TS.INTEGERP D)
					  then (if (EVENP D)
						     then (TTOD D)
						   else (BREAK1 NIL T (Offset is Odd in TE.ADDBASE)
								  NIL))
					else (BREAK1 NIL T (Type not Integer in TE.ADDBASE)
						       NIL]
		     (RETURN (TS.NEWTPTR (fetch (TCELL SUBTYP) of X)
					 VAL)))
      else (BREAK1 NIL T (Need Pointer in TE.ADDBASE)
		     NIL])

(TE.GETPTR.N
  [LAMBDA (X D)                                              (* rtk " 2-Apr-86 17:17")
    (if (TS.POINTERP X)
	then (TMEM.GETMEM (TE.ADDBASE X (DTOT D)))
      else (TS.UFNCALL])

(TE.PUTPTR.N
  [LAMBDA (X V D)                                            (* rtk " 2-Apr-86 17:13")
    (if (TS.POINTERP X)
	then (TMEM.SETMEM (TE.ADDBASE X (DTOT D))
			    V)
      else (TS.UFNCALL))

          (* * Return Ptr on the stack)


    X])

(TE.RPLPTR.N
  [LAMBDA (X V D)                                            (* rtk "25-Mar-86 07:27")

          (* * Same as PUTPTR for not (need to add reference counting))


    (if (TS.POINTERP X)
	then (TMEM.SETMEM (TE.ADDBASE X D)
			    V)
      else (TS.UFNCALL))
    X                                                        (* Return Ptr on the stack)
    ])

(TE.GETBASEBYTE
  [LAMBDA (X D)                                              (* edited: "14-Mar-86 15:40")

          (* * RETURNS BYTE ADDRESSED BY PTR X AND OFFSET D. RESULT IS RETURNED AS TARARIN INTEGER)


    (PROG (VALUE)
          (RETURN (if (TS.INTEGERP D)
		      then [SETQ VALUE (TE.GETPTR.N X (TE.LRSH1 (LOGAND (TE.LRSH1 D)
									      4294967294]
			     (TS.NEWINTP (SELECTQ (LOGAND 3 (TTOD D))
						  (0 (LRSH VALUE 24))
						  (1 (LRSH VALUE 16))
						  (2 (LRSH VALUE 8))
						  (VALUE)))
		    else (BREAK1 NIL T (Offset not Integer)
				   NIL])

(TE.PUTBASEBYTE
  [LAMBDA (X D V)                                            (* rtk "27-Mar-86 18:07")
    (PROG (WORD32)
          (if (AND (TS.INTEGERP V)
		     (TS.INTEGERP D))
	      then (SETQ V (.COERCE.TO.BYTE. (TTOD V)))
		     [SETQ WORD32 (TE.GETPTR.N X (TE.LRSH1 (TE.LRSH1 D]
		     (TE.PUTPTR.N X (TE.LRSH1 (TE.LRSH1 D))
				    (SELECTQ (LOGAND 3 (TTOD D))
					     (0 (LOGOR (LOGAND WORD32 16777215)
						       (LRSH V 24)))
					     (1 (LOGOR (LOGAND WORD32 4278255615)
						       (LRSH V 16)))
					     (2 (LOGOR (LOGAND WORD32 4294902015)
						       (LRSH V 8)))
					     (LOGOR (LOGAND WORD32 4294967040)
						    V)))
	    else (BREAK1 NIL T (Offset or Value not Integer in TE.PUTBASEBYTE)
			   NIL))
          (RETURN V])

(TE.COPY
  [LAMBDA NIL                                                (* edited: "11-Mar-86 13:50")
    (TS.REFTOS])

(TE.POP
  [LAMBDA (TOS)                                              (* rtk "25-Mar-86 07:27")
    TS.NILCONST])

(TE.DUMMY
  [LAMBDA NIL                                                (* edited: "11-Mar-86 13:54")
    TS.NILCONST])

(TE.DUNBIND
  [LAMBDA (ALPHA)                                            (* edited: "12-Mar-86 10:01")
    (IF (AND (GREATERP ALPHA (FETCH (TFRAME OVERHEADCELLS) OF T))
	       (LEQ ALPHA (FETCH (TFRAME TFRAMEWORDSIZE) OF T)))
	THEN (TS.PUTFRAMEPROP STACKFRAME (QUOTE SP)
				ALPHA)
      ELSE (BREAK1 NIL T (Illegal Stack Pointer Value)
		     NIL])

(TE.UNBIND
  [LAMBDA (ALPHA)                                            (* edited: "12-Mar-86 10:04")
    (PROG ((X (TS.REFTOS)))
          (TE.DUNBIND ALPHA)
          (TS.PUTFRAMEPROP STACKFRAME (TS.GETFRAMEPROP STACKFRAME (QUOTE SP))
			   X])

(TE.NEG
  [LAMBDA (TOS)                                              (* rtk "27-Mar-86 16:21")
    (IF (TS.INTEGERP TOS)
	THEN (DTOT (IDIFFERENCE 0 (TTOD TOS)))
      ELSE (TS.UFNCALL])

(TE.CAR
  [LAMBDA (PTR)                                              (* rtk " 2-Apr-86 17:16")
    (COND
      ((TS.LISTP PTR)
	(TE.GETPTR.N PTR 0))
      ((EQP PTR TS.NILCONST)
	TS.NILCONST)
      (T (TS.UFNCALL])

(TE.CDR
  [LAMBDA (PTR)                                              (* rtk " 3-Apr-86 07:26")
    (COND
      ((TS.LISTP PTR)
	(TE.GETPTR.N PTR TS.WORDINCR))
      ((EQP PTR TS.NILCONST)
	TS.NILCONST)
      (T (TS.UFNCALL])

(TE.LISTP
  [LAMBDA (TOS)                                              (* edited: "12-Mar-86 17:10")
    (DTOT (TS.LISTP TOS])

(TE.INTEGERP
  [LAMBDA (TOS)                                              (* edited: "12-Mar-86 17:14")
    (DTOT (TS.INTEGERP TOS])

(TE.POINTERP
  [LAMBDA (TOS)                                              (* edited: "12-Mar-86 17:16")
    (DTOT (TS.POINTERP TOS])

(TE.FLOATP
  [LAMBDA (TOS)                                              (* edited: "12-Mar-86 17:17")
    (DTOT (TS.FLOATP TOS])

(TE.NUMBERP
  [LAMBDA (TOS)                                              (* edited: "12-Mar-86 17:15")
    (DTOT (OR (TS.INTEGERP TOS)
	      (TS.NUMBERP TOS)
	      (TS.FLOATP TOS])

(TE.TYPEP.N
  [LAMBDA (TOS ALPHA)                                        (* edited: "12-Mar-86 10:28")
    (if (EQ ALPHA (fetch (TCELL FULLTYP) of TOS))
	then TOS
      else TS.NILCONST])

(TE.TYPEP.O
  [LAMBDA (TOS TYPE)                                         (* rtk "27-Mar-86 12:36")
    (IF (TS.POINTERP TOS)
	THEN (TE.TYPE.N (TMEM.GETMEM TOS)
			  TYPE)
      ELSE TS.NILCONST])

(TE.DTEST.O
  [LAMBDA (TOS ALPHA)                                        (* rtk "24-Mar-86 17:37")
    (PROG (X (TE.TEST.O TOS ALPHA))
          (RETURN (IF (EQ X TS.NILCONST)
		      THEN (TS.UFNCALL)
		    ELSE X])

(TE.NTYPE
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:38")
    NIL])

(TE.SETTYPE.N
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:38")
    NIL])

(TE.SETSUBTYP.N
  [LAMBDA NIL                                                (* rtk "24-Mar-86 17:39")
    NIL])

(TFUN.GETREGABS
  [LAMBDA (FNHDR DOFFSET)                                    (* edited: "14-Mar-86 16:34")
    (\GETBASEFIXP FNHDR DOFFSET])
)
(PUTPROPS TEFNS COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1870 23866 (TE.'T 1880 . 1997) (TE.'NIL 1999 . 2124) (TE.'0 2126 . 2251) (TE.'1 2253 . 
2378) (TE.'UNBIND 2380 . 2507) (TE.SICX 2509 . 2636) (TE.ACONST 2638 . 2846) (TE.PCONST 2848 . 3096) (
TE.ICONST 3098 . 3321) (TE.FCONST 3323 . 3458) (TE.FN0 3460 . 3593) (TE.FN1 3595 . 3732) (TE.FN2 3734
 . 3871) (TE.FN3 3873 . 4010) (TE.FN4 4012 . 4149) (TE.FN5 4151 . 4288) (TE.FN6 4290 . 4427) (TE.FN7 
4429 . 4566) (TE.APPLYFN 4568 . 4738) (TE.RETURN 4740 . 4873) (TE.MYALINK 4875 . 5111) (TE.MYCLINK 
5113 . 5353) (TE.MYCLINK← 5355 . 5605) (TE.CONTEXTSWITCH 5607 . 5729) (TE.DISINT 5731 . 5846) (
TE.ENBINT 5848 . 5963) (TE.JUMPK 5965 . 6205) (TE.JUMPX 6207 . 6479) (TE.JUMPXX 6481 . 6758) (
TE.TJUMPK 6760 . 6944) (TE.TJUMPX 6946 . 7147) (TE.FJUMPK 7149 . 7334) (TE.FJUMPX 7336 . 7538) (TE.NOP
 7540 . 7715) (TE.PLUS 7717 . 7921) (TE.DIFFERENCE 7923 . 8138) (TE.TIMES 8140 . 8340) (TE.QUOTIENT 
8342 . 8551) (TE.IPLUS 8553 . 9061) (TE.IDIFFERENCE 9063 . 9589) (TE.ITIMES 9591 . 10102) (
TE.IQUOTIENT 10104 . 10731) (TE.IREMAINDER 10733 . 11370) (TE.LLSH.N 11372 . 11743) (TE.LRSH.N 11745
 . 12116) (TE.ASH 12118 . 12362) (TE.LOGOR 12364 . 12795) (TE.LOGXOR 12797 . 13231) (TE.LOGAND 13233
 . 13667) (TE.EQ 13669 . 13797) (TE.EQL 13799 . 14058) (TE.EQUAL 14060 . 14174) (TE.GREATERP 14176 . 
14411) (TE.IGREATERP 14413 . 14761) (TE.VARK 14763 . 14909) (TE.VARX 14911 . 15042) (TE.VARK← 15044 . 
15192) (TE.VARX← 15194 . 15332) (TE.VARK←NIL 15334 . 15496) (TE.VARK←UNBIND 15498 . 15666) (TE.FVARX 
15668 . 15892) (TE.FVARX← 15894 . 16139) (TE.FVARM 16141 . 16255) (TE.FVARM← 16257 . 16372) (TE.GVAR 
16374 . 16772) (TE.GVAR← 16774 . 16950) (TE.VARM 16952 . 17065) (TE.VARM← 17067 . 17181) (TE.ADDBASE 
17183 . 17940) (TE.GETPTR.N 17942 . 18158) (TE.PUTPTR.N 18160 . 18440) (TE.RPLPTR.N 18442 . 18839) (
TE.GETBASEBYTE 18841 . 19449) (TE.PUTBASEBYTE 19451 . 20237) (TE.COPY 20239 . 20363) (TE.POP 20365 . 
20485) (TE.DUMMY 20487 . 20613) (TE.DUNBIND 20615 . 21001) (TE.UNBIND 21003 . 21261) (TE.NEG 21263 . 
21468) (TE.CAR 21470 . 21696) (TE.CDR 21698 . 21934) (TE.LISTP 21936 . 22070) (TE.INTEGERP 22072 . 
22212) (TE.POINTERP 22214 . 22354) (TE.FLOATP 22356 . 22492) (TE.NUMBERP 22494 . 22684) (TE.TYPEP.N 
22686 . 22901) (TE.TYPEP.O 22903 . 23118) (TE.DTEST.O 23120 . 23356) (TE.NTYPE 23358 . 23472) (
TE.SETTYPE.N 23474 . 23592) (TE.SETSUBTYP.N 23594 . 23714) (TFUN.GETREGABS 23716 . 23864)))))
STOP