+#ifdef tahoe
+fp_entrycode(eecookiep)
+ struct entry_exit_cookie *eecookiep;
+{
+ int ftnno = eecookiep -> nlp -> value[NL_ENTLOC];
+ int proflabel = (int) getlab();
+ int setjmp0 = (int) getlab();
+
+ /*
+ * top of code; destination of jump from formal entry code.
+ */
+ eecookiep -> toplabel = (int) getlab();
+ (void) putlab( (char *) eecookiep -> toplabel );
+ putprintf(" subl3 $%s%d,fp,sp" , 0 , (int) FRAME_SIZE_LABEL, ftnno );
+ if ( profflag ) {
+ /*
+ * call mcount for profiling
+ */
+ putprintf( " pushal " , 1 );
+ putprintf( PREFIXFORMAT , 0 , (int) LABELPREFIX , proflabel );
+ putprintf( " callf $8,mcount" , 0 );
+ putprintf( " .data" , 0 );
+ putprintf( " .align 2" , 0 );
+ (void) putlab( (char *) proflabel );
+ putprintf( " .long 0" , 0 );
+ putprintf( " .text" , 0 );
+ }
+ /*
+ * if there are nested procedures that access our variables
+ * we must save the display.
+ */
+ if ( parts[ cbn ] & NONLOCALVAR ) {
+ /*
+ * save old display
+ */
+ putprintf( " movl %s+%d,%d(%s)" , 0
+ , (int) DISPLAYNAME , cbn * sizeof(struct dispsave)
+ , DSAVEOFFSET , (int) P2FPNAME );
+ /*
+ * set up new display by saving FP in appropriate
+ * slot in display structure.
+ */
+ putprintf( " movl %s,%s+%d" , 0
+ , (int) P2FPNAME , (int) DISPLAYNAME , cbn * sizeof(struct dispsave) );
+ }
+ /*
+ * set underflow checking if runtime tests
+ */
+ if ( opt( 't' ) ) {
+ putprintf( " bicpsw $0x20" , 0 );
+ }
+ /*
+ * zero local variables if checking is on
+ * by calling blkclr( bytes of locals , starting local address );
+ */
+ if ( opt( 't' ) && ( -sizes[ cbn ].om_max ) > DPOFF1 ) {
+ putleaf( PCC_ICON , 0 , 0 , PCCM_ADDTYPE( PCCTM_FTN | PCCT_INT , PCCTM_PTR )
+ , "_blkclr" );
+ putLV((char *) 0 , cbn , (int) sizes[ cbn ].om_max , NLOCAL , PCCT_CHAR );
+ putleaf( PCC_ICON , (int) (( -sizes[ cbn ].om_max ) - DPOFF1)
+ , 0 , PCCT_INT ,(char *) 0 );
+ putop( PCC_CM , PCCT_INT );
+ putop( PCC_CALL , PCCT_INT );
+ putdot( filename , line );
+ }
+ /*
+ * set up goto vector if non-local goto to this frame
+ */
+ if ( parts[ cbn ] & NONLOCALGOTO ) {
+ putleaf( PCC_ICON , 0 , 0 , PCCM_ADDTYPE( PCCTM_FTN | PCCT_INT , PCCTM_PTR )
+ , "_setjmp" );
+ putLV( (char *) 0 , cbn , GOTOENVOFFSET , NLOCAL , PCCTM_PTR|PCCT_STRTY );
+ putop( PCC_CALL , PCCT_INT );
+ putleaf( PCC_ICON , 0 , 0 , PCCT_INT , (char *) 0 );
+ putop( PCC_NE , PCCT_INT );
+ putleaf( PCC_ICON , setjmp0 , 0 , PCCT_INT , (char *) 0 );
+ putop( PCC_CBRANCH , PCCT_INT );
+ putdot( filename , line );
+ /*
+ * on non-local goto, setjmp returns with address to
+ * be branched to.
+ */
+ putprintf( " jmp (r0)" , 0 );
+ (void) putlab((char *) setjmp0);
+ }
+}
+#endif tahoe
+
+#if defined(vax) || defined(tahoe)