* emultempl/spu_ovl.S: Add debug printf code.
authorAlan Modra <amodra@gmail.com>
Wed, 26 Sep 2007 03:13:55 +0000 (03:13 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 26 Sep 2007 03:13:55 +0000 (03:13 +0000)
ld/ChangeLog
ld/emultempl/spu_ovl.S

index e5a51293455b5ae469fbe3820ea5a49a05fd6e7b..13402db43e7da1ba1c6ec3e20254910879895a25 100644 (file)
@@ -1,3 +1,7 @@
+2007-09-26  Brian Watt  <bwatt@us.ibm.com>
+
+       * emultempl/spu_ovl.S: Add debug printf code.
+
 2007-09-17  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR binutils/3281
index 96601d744e2f41dac380fe1ee7769bd8b023ad32..66dd69bf7e513a50ca630b458bd83dabcd2110b9 100644 (file)
 #define irq_stat       $9
 #endif
 
+# Stack quadword minux N
+#define        SQWM1   -16*1
+#define        SQWM2   -16*2
+#define        SQWM3   -16*3
+#define        SQWM4   -16*4
+#define        SQWM5   -16*5
+#define        SQWM6   -16*6
+#define        SQWM7   -16*7
+#define        SQWM8   -16*8
+#define        SQWM9   -16*9
+#define        SQWM10  -16*10
+#define        SQWM11  -16*11
+#define        SQWM12  -16*12
+#define        SQWM13  -16*13
+#define        SQWM14  -16*14
+#define        SQWM15  -16*15
+#define        SQWM16  -16*16
+
        .extern         _ovly_table
        .extern         _ovly_buf_table
 
+#ifdef OVLY_PRINTFS
+#define SPE_C99_VPRINTF 37
+__entry_event_format:
+       .string         "In entry_event_hook segment=0x%08x entry-address=0x%08x\n"
+__debug_event_format:
+       .string         "In debug_event_hook link-register=0x%08x %08x %08x %08x\n"
+__dma_event_format:
+       .string         "In dma_event_hook vma=0x%08x ea=%08x%08x sz=%08x\n"
+__ovly_buf_table_format:
+       .string         "_ovly_buf_table[%08x]=%08x\n"
+#endif
+
        .text
        .align          4
        .type           __rv_pattern, @object
@@ -118,7 +148,7 @@ __ovly_return:
  * outputs:
  *     $lr     new link register, returning through __ovly_return.
  *
- * Copy a new overlay partition into local store, or return 
+ * Copy a new overlay partition into local store, or return
  * immediately if the partition is already resident.
  */
        .global         __ovly_load
@@ -131,7 +161,7 @@ __ovly_load:
        stqd            $8, -48($sp)
 
 #ifdef OVLY_IRQ_SAVE
-/* Save irq state, then disable interrupts. */ 
+/* Save irq state, then disable interrupts. */
        stqd            $9, -64($sp)
        ila             irqtmp, __ovly_irq_save
        rdch            irq_stat, $SPU_RdMachStat
@@ -139,6 +169,107 @@ __ovly_load:
 __ovly_irq_save:
 #endif
 
+#ifdef OVLY_PRINTFS
+//==============================================
+// In entry_event_hook segment=0x%08x entry-address=0x%08x
+//==============================================
+# save registers
+       stqd    $10, SQWM5($sp)
+       stqd    $11, SQWM6($sp)
+       stqd    $12, SQWM7($sp)
+# Place input parameters onto the stack to form the
+# local storage memory image.
+       ila     $10, __entry_event_format
+       stqd    $10, SQWM12($sp)
+       ai      $10, $sp, SQWM9
+       stqd    $10, SQWM11($sp)
+       stqd    $sp, SQWM10($sp)
+       stqd    $78, SQWM9($sp)
+       stqd    $79, SQWM8($sp)
+# Construct a message consisting of the 8-bit opcode
+# and 24-bit local store pointer to the input
+# parameters and place it forllowing the stop and signal
+       ila     $10, 0x3ffff            # address mask
+       ilhu    $11, SPE_C99_VPRINTF << 8
+       ai      $12, $sp, SQWM12        # parameter pointer
+       selb    $11, $11, $12, $10      # combine command & address ptr
+       brsl    $10, next1a
+next1a:
+       .type   next1a, @function
+       lqr     $12, message1a
+       cwd     $10, message1a-next1a($10)
+       shufb   $11, $11, $12, $10      # insert msg into inst word
+       stqr    $11, message1a          # store cmd/ptr into msg word
+       dsync
+# Notify the PPE to perform the assisted call request
+# by issing a stop and signal with a signal code
+# of 0x2100 (C99 class)
+       stop    0x2100
+message1a:
+       .word   0
+
+# save registers
+       stqd    $13, SQWM8($sp)
+       stqd    $14, SQWM9($sp)
+       stqd    $15, SQWM10($sp)
+       stqd    $16, SQWM11($sp)
+
+# initialize loop
+       il      $13, 1
+       ila     $14, _ovly_buf_table
+       ila     $15, _ovly_buf_table_end
+
+loop_start1:
+# Place input parameters onto the stack to form the
+# local storage memory image.
+       ila     $10, __ovly_buf_table_format
+       stqd    $10, SQWM16($sp)
+       ai      $10, $sp, SQWM13
+       stqd    $10, SQWM15($sp)
+       stqd    $sp, SQWM14($sp)
+       stqd    $13, SQWM13($sp)
+       lqd     $16, 0($14)
+       rotqby  $16, $16, $14
+       stqd    $16, SQWM12($sp)
+# Construct a message consisting of the 8-bit opcode
+# and 24-bit local store pointer to the input
+# parameters and place it forllowing the stop and signal
+       ila     $10, 0x3ffff            # address mask
+       ilhu    $11, SPE_C99_VPRINTF << 8
+       ai      $12, $sp, SQWM16        # parameter pointer
+       selb    $11, $11, $12, $10      # combine command & address ptr
+       brsl    $10, next1b
+next1b:
+       .type   next1b, @function
+       lqr     $12, message1b
+       cwd     $10, message1b-next1b($10)
+       shufb   $11, $11, $12, $10      # insert msg into inst word
+       stqr    $11, message1b          # store cmd/ptr into msg word
+       dsync
+# Notify the PPE to perform the assisted call request
+# by issing a stop and signal with a signal code
+# of 0x2100 (C99 class)
+       stop    0x2100
+message1b:
+       .word   0
+
+# move to next entry
+       ai      $13, $13, 1
+       ai      $14, $14, 4
+       clgt    $16, $15, $14
+       brnz    $16, loop_start1
+
+# restore registers
+       lqd     $16, SQWM11($sp)
+       lqd     $15, SQWM10($sp)
+       lqd     $14, SQWM9($sp)
+       lqd     $13, SQWM8($sp)
+       lqd     $12, SQWM7($sp)
+       lqd     $11, SQWM6($sp)
+       lqd     $10, SQWM5($sp)
+//==============================================
+#endif
+
 /* Set branch hint to overlay target. */
        hbr             __ovly_load_ret, $79
 
@@ -153,7 +284,7 @@ __ovly_backchain_loop:
        lqd             bchn, 0(bchn)
        ceq             cmp, lnkr, retval
        ceqi            cmp2, bchn, 0
-       or              cmp, cmp, cmp2  
+       or              cmp, cmp, cmp2
        brz             cmp, __ovly_backchain_loop
 
 /* If we reached the zero back-chain, then lnkr is bogus.  Clear the
@@ -216,7 +347,7 @@ __ovly_load_event:
        shufb           map, $78, map, genwi
        stqx            map, tab, off
 
-/* A new partition needs to be loaded. Prepare for DMA loop. 
+/* A new partition needs to be loaded. Prepare for DMA loop.
  * _EAR_ is the 64b base EA, filled in at run time by the
  * loader, and indicating the value for SPU executable image start.
  */
@@ -247,6 +378,54 @@ __ovly_xfer_loop:
        ila             cmd, MFC_GET_CMD
        wrch            $MFC_Cmd, cmd
 
+#ifdef OVLY_PRINTFS
+//==============================================
+// In dma_event_hook vma=0x%08x ea=%08x%08x sz=%08x
+//==============================================
+# save registers
+       stqd    $10, SQWM5($sp)
+       stqd    $11, SQWM6($sp)
+       stqd    $12, SQWM7($sp)
+# Place input parameters onto the stack to form the
+# local storage memory image.
+       ila     $10, __dma_event_format
+       stqd    $10, SQWM14($sp)
+       ai      $10, $sp, SQWM11
+       stqd    $10, SQWM13($sp)
+       stqd    $sp, SQWM12($sp)
+       stqd    vma, SQWM11($sp)
+       stqd    ea64, SQWM10($sp)
+       stqd    ealo, SQWM9($sp)
+       stqd    sz, SQWM8($sp)
+# Construct a message consisting of the 8-bit opcode
+# and 24-bit local store pointer to the input
+# parameters and place it forllowing the stop and signal
+       ila     $10, 0x3ffff            # address mask
+       ilhu    $11, SPE_C99_VPRINTF << 8
+       ai      $12, $sp, SQWM14        # parameter pointer
+       selb    $11, $11, $12, $10      # combine command & address ptr
+       brsl    $10, next3a
+next3a:
+       .type   next3a, @function
+       lqr     $12, message3a
+       cwd     $10, message3a-next3a($10)
+       shufb   $11, $11, $12, $10      # insert msg into inst word
+       stqr    $11, message3a          # store cmd/ptr into msg word
+       dsync
+# Notify the PPE to perform the assisted call request
+# by issing a stop and signal with a signal code
+# of 0x2100 (C99 class)
+       stop    0x2100
+message3a:
+       .word   0
+
+# restore registers
+       lqd     $12, SQWM7($sp)
+       lqd     $11, SQWM6($sp)
+       lqd     $10, SQWM5($sp)
+//==============================================
+#endif
+
 /* Increment vma, decrement size, branch back as needed. */
        a               vma, vma, sz
        sf              osize, sz, osize
@@ -266,6 +445,112 @@ __ovly_xfer_loop:
        sync
        wrch            $MFC_WrTagMask, oldmask
 
+#ifdef OVLY_PRINTFS
+//==============================================
+// In debug_event_hook link-register=0x%08x %08x %08x %08x
+//==============================================
+# save registers
+       stqd    $10, SQWM5($sp)
+       stqd    $11, SQWM6($sp)
+       stqd    $12, SQWM7($sp)
+# Place input parameters onto the stack to form the
+# local storage memory image.
+       ila     $10, __debug_event_format
+       stqd    $10, SQWM14($sp)
+       ai      $10, $sp, SQWM11
+       stqd    $10, SQWM13($sp)
+       stqd    $sp, SQWM12($sp)
+       stqd    $lr, SQWM11($sp)
+       rotqbyi $10, $lr, 4
+       stqd    $10, SQWM10($sp)
+       rotqbyi $10, $10, 4
+       stqd    $10, SQWM9($sp)
+       rotqbyi $10, $10, 4
+       stqd    $10, SQWM8($sp)
+# Construct a message consisting of the 8-bit opcode
+# and 24-bit local store pointer to the input
+# parameters and place it forllowing the stop and signal
+       ila     $10, 0x3ffff            # address mask
+       ilhu    $11, SPE_C99_VPRINTF << 8
+       ai      $12, $sp, SQWM14        # parameter pointer
+       selb    $11, $11, $12, $10      # combine command & address ptr
+       brsl    $10, next2a
+next2a:
+       .type   next2a, @function
+       lqr     $12, message2a
+       cwd     $10, message2a-next2a($10)
+       shufb   $11, $11, $12, $10      # insert msg into inst word
+       stqr    $11, message2a          # store cmd/ptr into msg word
+       dsync
+# Notify the PPE to perform the assisted call request
+# by issing a stop and signal with a signal code
+# of 0x2100 (C99 class)
+       stop    0x2100
+message2a:
+       .word   0
+
+# save registers
+       stqd    $13, SQWM8($sp)
+       stqd    $14, SQWM9($sp)
+       stqd    $15, SQWM10($sp)
+       stqd    $16, SQWM11($sp)
+
+# initialize loop
+       il      $13, 1
+       ila     $14, _ovly_buf_table
+       ila     $15, _ovly_buf_table_end
+
+loop_start2:
+# Place input parameters onto the stack to form the
+# local storage memory image.
+       ila     $10, __ovly_buf_table_format
+       stqd    $10, SQWM16($sp)
+       ai      $10, $sp, SQWM13
+       stqd    $10, SQWM15($sp)
+       stqd    $sp, SQWM14($sp)
+       stqd    $13, SQWM13($sp)
+       lqd     $16, 0($14)
+       rotqby  $16, $16, $14
+       stqd    $16, SQWM12($sp)
+# Construct a message consisting of the 8-bit opcode
+# and 24-bit local store pointer to the input
+# parameters and place it forllowing the stop and signal
+       ila     $10, 0x3ffff            # address mask
+       ilhu    $11, SPE_C99_VPRINTF << 8
+       ai      $12, $sp, SQWM16        # parameter pointer
+       selb    $11, $11, $12, $10      # combine command & address ptr
+       brsl    $10, next2b
+next2b:
+       .type   next2b, @function
+       lqr     $12, message2b
+       cwd     $10, message2b-next2b($10)
+       shufb   $11, $11, $12, $10      # insert msg into inst word
+       stqr    $11, message2b          # store cmd/ptr into msg word
+       dsync
+# Notify the PPE to perform the assisted call request
+# by issing a stop and signal with a signal code
+# of 0x2100 (C99 class)
+       stop    0x2100
+message2b:
+       .word   0
+
+# move to next entry
+       ai      $13, $13, 1
+       ai      $14, $14, 4
+       clgt    $16, $15, $14
+       brnz    $16, loop_start2
+
+# restore registers
+       lqd     $16, SQWM11($sp)
+       lqd     $15, SQWM10($sp)
+       lqd     $14, SQWM9($sp)
+       lqd     $13, SQWM8($sp)
+       lqd     $12, SQWM7($sp)
+       lqd     $11, SQWM6($sp)
+       lqd     $10, SQWM5($sp)
+//==============================================
+#endif
+
        .global         _ovly_debug_event
        .type           _ovly_debug_event, @function
 _ovly_debug_event: