# vcg_output --- PMA output module for code generator

define(DB,#)
define(put_mr,out$01)
define(put_label,out$02)
define(put_branch,out$03)
define(put_generic,out$04)
define(put_misc,out$05)

# put_instr --- write PMA equivalent of code string

   subroutine put_instr (code)
   ipointer code

   include VCG_COMMON

   ipointer i

   i = code
   repeat {
      select (Imem (i))
         when (GENERIC_INSTRUCTION)
            call put_generic (i)
         when (BRANCH_INSTRUCTION)
            call put_branch (i)
         when (MR_INSTRUCTION)
            call put_mr (i)
         when (LABEL_INSTRUCTION)
            call put_label (i)
         when (MISC_INSTRUCTION)
            call put_misc (i)
      else
         call panic ("put_instr: bad instr type (*i)*n"p,
            Imem (i))
      i = Imem (i + 1)
      } until (i == code)

   return
   end



include "vcg_output.put_branch.r.i"
include "vcg_output.put_mr.r.i"
include "vcg_output.put_label.r.i"
include "vcg_output.put_generic.r.i"
include "vcg_output.put_misc.r.i"
include "vcg_output.put_ent.r.i"



# put_module_header --- output pseudo-ops signalling start of module

   subroutine put_module_header

   define (MODULE_INS,5)

   include VCG_COMMON

   integer dummy (1)

DB call print (ERROUT, "put_module_header*n"p)


   if (Emit_PMA == YES)
      call print (Outfile, " SEG*n RLIT*n SYML*n"s)

   if (Emit_Obj == YES)
      call otg (PSEUDO_INSTRUCTION, dummy, MODULE_INS)

   return
   end

   undefine (MODULE_INS)


# put_start_data --- signal the end of the prefix block to otg

   subroutine put_start_data

   define (END_PREFIX_INS,6)

   include VCG_COMMON

   integer dummy (1)

DB call print (ERROUT, "put_start_data*n"p)

   if (Emit_Obj == YES)
      call otg (PSEUDO_INSTRUCTION, dummy, END_PREFIX_INS)

   return
   end

   undefine (END_PREFIX_INS)


# put_module_trailer --- output pseudo-ops signalling end of module

   subroutine put_module_trailer

   define (END_INS,4)

   include VCG_COMMON

   integer dummy (1)

DB call print (ERROUT, "put_module_trailer*n"p)

   if (Emit_PMA == YES)
      call print (Outfile, " END*n"s)

   if (Emit_Obj == YES)
      call otg (PSEUDO_INSTRUCTION, dummy, END_INS)

   return
   end

   undefine (END_INS)





undefine(put_mr)
undefine(put_label)
undefine(put_branch)
undefine(put_generic)
undefine(putone)
undefine(put_misc)
undefine(DB)