text: 	.arch ev6
  
          .text
          .align  4
          .globl  GC_push_regs
          .ent    GC_push_regs 2
  GC_push_regs:
  	ldgp    $gp, 0($27)
  	lda     $sp, -16($sp)
  	stq     $26, 0($sp)
          .mask   0x04000000, 0
          .frame  $sp, 16, $26, 0
  
  /* $0		integer result                                                */
  /* $1-$8	temp regs - not preserved cross calls                         */
  /* $9-$15	call saved regs                                               */
  /* $16-$21	argument regs - not preserved cross calls                     */
  /* $22-$28	temp regs - not preserved cross calls                         */
  /* $29		global pointer - not preserved cross calls                    */
  /* $30		stack pointer                                                 */
  
  # define call_push(x)			\
  	mov   x, $16;			\
  	jsr   $26, GC_push_one;		\
  	ldgp  $gp, 0($26)
  	
          call_push($9)
          call_push($10)
          call_push($11)
          call_push($12)
          call_push($13)
          call_push($14)
          call_push($15)
  
  /* $f0-$f1	floating point results                                        */
  /* $f2-$f9	call saved regs                                               */
  /* $f10-$f30	temp regs - not preserved cross calls                         */
  
  	/* Use the most efficient transfer method for this hardware. */
  	/* Bit 1 detects the FIX extension, which includes ftoit. */
  	amask	2, $0
  	bne	$0, $use_stack
  
  #undef call_push
  #define call_push(x)			\
  	ftoit	x, $16;			\
  	jsr	$26, GC_push_one;	\
  	ldgp	$gp, 0($26)
  
  	call_push($f2)
  	call_push($f3)
  	call_push($f4)
  	call_push($f5)
  	call_push($f6)
  	call_push($f7)
  	call_push($f8)
  	call_push($f9)
  
  	ldq     $26, 0($sp)
  	lda     $sp, 16($sp)
  	ret     $31, ($26), 1
  
  	.align	4
  $use_stack:
  
  #undef call_push
  #define call_push(x)			\
  	stt	x, 8($sp);		\
  	ldq	$16, 8($sp);		\
  	jsr	$26, GC_push_one;	\
  	ldgp	$gp, 0($26)
  
  	call_push($f2)
  	call_push($f3)
  	call_push($f4)
  	call_push($f5)
  	call_push($f6)
  	call_push($f7)
  	call_push($f8)
  	call_push($f9)
  
  	ldq     $26, 0($sp)
  	lda     $sp, 16($sp)
  	ret     $31, ($26), 1
  
  	.end    GC_push_regs
  