DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T v

⟦1d410c3ed⟧ TextFile

    Length: 4143 (0x102f)
    Types: TextFile
    Names: »va-mips.h«

Derivation

└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
    └─⟦d53cfc7b2⟧ »./gcc-1.35.tar.Z« 
        └─⟦90f628c1d⟧ 
            └─⟦this⟧ »gcc-1.35/va-mips.h« 

TextFile

/* ---------------------------------------- */
/*           VARARGS  for MIPS/GNU CC       */
/*                                          */
/*                                          */
/*                                          */
/*                                          */
/* ---------------------------------------- */

/* WARNING: THIS depends heavily on in register parameter
   passing conventions of the MIPS.  This is compatible with MIPS
   programs, including printf; but differs from MIPS
   implementation. */

/*            PROLOGUE FOR VARARGS PROGRAMS:
	      
                                        ;;;; META COMMENTS
      .align 0
                                        ;;;; Purpose: identify varargs pgm
                                        ;;;; to codegen. I'd rather have a
					;;;; Flag in the compiler than this.

__vd_alist.0:
      .ascii "__%%VARARGS\0"
      .ent    zrintf
zrintf:
 #PROLOGUE
      add     $8,$0,$29
                                        ;;;; Leave extra space in frame
					;;;; to save f12 f14
      subu    $29,112 #temp=   76,saveregs=   32, sfo=   -4
 #    .mask   0xc0010000
      sw      $31,4($29)
      sw      $30,8($29)
                                        ;;;; Purpose:save stack size on stack
                                        ;;;; for easier retrieval
      addi    $9,$0,112       #Varargs suspicion
      sw      $9,-4($8)       #Varargs suspicion
                                        ;;;; save floating point registers
                                        ;;;; into extra stack space (in the
					;;;; varargs callee frame, NOT in the
					;;;; space saved by caller for register
					;;;; argument write back. Thus, we
					;;;; can write back both, and let the
					;;;; va_arg macro decide what is
					;;;; required.

      s.d     $f12,16($29)    #Varargs Suspicion
      s.d     $f14,24($29)    #Varargs Suspicion

      sw      $16,28($29)
 #    .fmask  0x0
      add     $30,$0,$8
 #END PROLOGUE
                                        ;;;; Write back of r4-r7 due to
					;;;; the va_dcl, va_start combination

      sw      $4,0($30)       #movsi $4 -> 0($30)
      sw      $5,4($30)       #movsi $5 -> 4($30)
      sw      $6,8($30)       #movsi $6 -> 8($30)
      sw      $7,12($30)      #movsi $7 -> 12($30)
  
*/
\f


typedef struct 
{ int pnt;
  char *stack;
  double *fpregs;  
   } va_list  ;
				/* Used to push R4-R7 to stack  */
				/* and to access argument list on stack */
#define va_alist _va_alist, __va_alist,__vb_alist,__vc_alist

#define va_dcl int _va_alist, __va_alist,__vb_alist,__vc_alist; 


#define va_start(list) {\
       static char __vd_alist[16] = "__%%VARARGS";  /* Identify to codegen */\
       &__va_alist,&__vb_alist,&__vc_alist,         /* write back to stack */\
       (list).pnt = 0,                              /* start from first    */\
       (list).stack =  (char *) &_va_alist,         /* Access parameter list*/\
       (list).fpregs =  (double *)((list).stack -\
				   *(int *)((list).stack -4) +  16),       \
       (list).stack;}         

#define va_end(list)

				/* For argument passing convention see */
				/* both tm.h and Jerry Kane's book     */

#define va_arg(list,mode) (((mode *)\
              (((sizeof(mode) > 4) ?\
		    (((list).pnt == 0 )?(((list).pnt = -1),\
				       (list).stack = (char *)\
				                       (((int)((list).stack)\
						      + 2*8 - 1) & -8),\
				       (char *)((list).fpregs+1)\
				       )\
  		       :((list).pnt == -1) ?((list).pnt = 2,\
				       (list).stack = (char *)\
					              (((int)((list).stack)\
						      + 2*8 - 1) & -8),\
				       (char *)((list).fpregs+2) \
				       )\
  		              :(((list).pnt > 0 )?\
				((list).pnt =((list).pnt +1),\
                                                (list).stack =(char *)\
						   (((int)((list).stack)\
						      + 2*8 - 1) & -8) \
						):(char *)abort()))\
		:((list).pnt = (((list).pnt >=0) ? ((list).pnt +1)\
                                :((list).pnt == -1) ? 2 :3),\
		 (list).stack =  (char *)(((int)((list).stack)+ 2*4 - 1) & -4)\
		)\
		)))[-1])\