This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, SPU] Updates to the spu_mfcio.h header file


Jonathan Adamczewski wrote:

> 2008/7/24 Ulrich Weigand <uweigand@de.ibm.com>:
> 
> >  #define MFC_MIN_DMA_LIST_SIZE 0x0008   /*   8 bytes */
> >  #define MFC_MAX_DMA_LIST_SIZE 0x4000   /* 16K bytes */
> >
> > + #define MFC_MIN_DMA_LIST_ELEMENTS  1
> > + #define MFC_MAX_DMA_LIST_ELEMENTS  2048
> 
> Is it possible/desirable to see one of these defined in terms of the other?

Good point.  I've changed this to define ...LIST_SIZE in terms of
...LIST_ELEMENTS.

> The last line should be
> ! #define MFC_PUTLF_CMD        (MFC_PUTL_CMD | MFC_FENCE_ENABLE)
> Same.  Last line should be
>  ! #define MFC_PUTRLF_CMD       (MFC_PUTRL_CMD | MFC_FENCE_ENABLE)

Oops.  Thanks for catching this!  Fixed in the version below.

> Should these (and possibly other long lines in the file) be split?

I've deliberately used the same style as the rest of the file for now.
This is clearly not GNU coding-style compliant, and I agree that this
should be fixed, but I'd prefer to do this as a separate cleanup-only
patch ...

Bye,
Ulrich


ChangeLog:

	* config/spu_spu_mfcio.h: Wrap in extern "C" if __cplusplus.
	Reword some comments throughout the file.

	(MFC_MIN_DMA_LIST_ELEMENTS): New define.
	(MFC_MAX_DMA_LIST_ELEMENTS): Likewise.
	(MFC_MIN_DMA_LIST_SIZE): Redefine in terms of MFC_MIN_DMA_LIST_ELEMENTS.
	(MFC_MAX_DMA_LIST_SIZE): Redefine in terms of MFC_MAX_DMA_LIST_ELEMENTS.

	(MFC_START_ENABLE): Remove PPU-only define.
	(MFC_PUTS_CMD, MFC_PUTFS_CMD, MFC_PUTBS_CMD): Likewise.
	(MFC_GETS_CMD, MFC_GETFS_CMD, MFC_GETBS_CMD): Likewise.

	(MFC_PUTB_CMD, MFC_PUTF_CMD): Reimplement using symbolic constants.
	(MFC_PUTL_CMD, MFC_PUTLB_CMD, MFC_PUTLF_CMD): Likewise.
	(MFC_PUTR_CMD, MFC_PUTRB_CMD, MFC_PUTRF_CMD): Likewise.
	(MFC_PUTRL_CMD, MFC_PUTRLB_CMD, MFC_PUTRLF_CMD): Likewise.
	(MFC_GETB_CMD, MFC_GETF_CMD): Likewise.
	(MFC_GETL_CMD, MFC_GETLB_CMD, MFC_GETLF_CMD): Likewise.
	(MFC_SNDSIGB_CMD, MFC_SNDSIGF_CMD): Likewise.

	(MFC_SDCRT_CMD, MFC_SDCRTST_CMD): New defines.
	(MFC_SDCRZ_CMD, MFC_SDCRST_CMD, MFC_SDCRF_CMD): Likewise.
	(mfc_sdcrt, mfc_sdcrtst): Likewise.
	(mfc_sdcrz, mfc_sdcrst, mfc_sdcrf): Likewise.

	(spu_read_machine_status): Fix typo.


Index: gcc/config/spu/spu_mfcio.h
===================================================================
*** gcc/config/spu/spu_mfcio.h	(revision 138037)
--- gcc/config/spu/spu_mfcio.h	(working copy)
*************** typedef unsigned long long uint64_t;
*** 31,36 ****
--- 31,40 ----
  #include <stdint.h>
  #endif
  
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
  
  /****************************************************************/
  /* DMA list element structure*/
*************** typedef struct mfc_list_element {
*** 59,79 ****
  #define MFC_MIN_DMA_SIZE_MASK (MFC_MIN_DMA_SIZE - 1)
  #define MFC_MAX_DMA_SIZE_MASK (MFC_MAX_DMA_SIZE - 1)
  
! #define MFC_MIN_DMA_LIST_SIZE 0x0008   /*   8 bytes */
! #define MFC_MAX_DMA_LIST_SIZE 0x4000   /* 16K bytes */
  
  /****************************************************************/
! /* MFC DMA Command flags which identify classes of operations.   */
  /****************************************************************/
! /* Note: These flags may be used in conjunction with the base command types
!   (i.e. MFC_PUT_CMD, MFC_PUTR_CMD, MFC_GET_CMD, and MFC_SNDSIG_CMD)
!   to construct the various command permutations.
!  */
  
  #define MFC_BARRIER_ENABLE    0x0001
  #define MFC_FENCE_ENABLE      0x0002
! #define MFC_LIST_ENABLE       0x0004   /* SPU Only */
! #define MFC_START_ENABLE      0x0008   /*  PU Only */
  #define MFC_RESULT_ENABLE     0x0010
  
  /****************************************************************/
--- 63,85 ----
  #define MFC_MIN_DMA_SIZE_MASK (MFC_MIN_DMA_SIZE - 1)
  #define MFC_MAX_DMA_SIZE_MASK (MFC_MAX_DMA_SIZE - 1)
  
! #define MFC_MIN_DMA_LIST_ELEMENTS 1
! #define MFC_MAX_DMA_LIST_ELEMENTS 2048
! 
! #define MFC_MIN_DMA_LIST_SIZE (MFC_MIN_DMA_LIST_ELEMENTS << 3) /*   8 bytes */
! #define MFC_MAX_DMA_LIST_SIZE (MFC_MAX_DMA_LIST_ELEMENTS << 3) /* 16K bytes */
  
  /****************************************************************/
! /* MFC DMA command modifiers to identify classes of operations. */
  /****************************************************************/
! 
! /* Note: These commands modifier may be used in conjunction with the base
!    command types (i.e. MFC_PUT_CMD, MFC_GET_CMD, and MFC_SNDSIG_CMD)
!    to construct the various command permutations.  */
  
  #define MFC_BARRIER_ENABLE    0x0001
  #define MFC_FENCE_ENABLE      0x0002
! #define MFC_LIST_ENABLE       0x0004
  #define MFC_RESULT_ENABLE     0x0010
  
  /****************************************************************/
*************** typedef struct mfc_list_element {
*** 81,122 ****
  /****************************************************************/
  
  #define MFC_PUT_CMD          0x0020
! #define MFC_PUTS_CMD         0x0028   /*  PU Only */
! #define MFC_PUTR_CMD         0x0030
! #define MFC_PUTF_CMD         0x0022
! #define MFC_PUTB_CMD         0x0021
! #define MFC_PUTFS_CMD        0x002A   /*  PU Only */
! #define MFC_PUTBS_CMD        0x0029   /*  PU Only */
! #define MFC_PUTRF_CMD        0x0032
! #define MFC_PUTRB_CMD        0x0031
! #define MFC_PUTL_CMD         0x0024   /* SPU Only */
! #define MFC_PUTRL_CMD        0x0034   /* SPU Only */
! #define MFC_PUTLF_CMD        0x0026   /* SPU Only */
! #define MFC_PUTLB_CMD        0x0025   /* SPU Only */
! #define MFC_PUTRLF_CMD       0x0036   /* SPU Only */
! #define MFC_PUTRLB_CMD       0x0035   /* SPU Only */
  
  /****************************************************************/
  /* MFC DMA Get Commands                                 */
  /****************************************************************/
  
  #define MFC_GET_CMD          0x0040
! #define MFC_GETS_CMD         0x0048   /*  PU Only */
! #define MFC_GETF_CMD         0x0042
! #define MFC_GETB_CMD         0x0041
! #define MFC_GETFS_CMD        0x004A   /*  PU Only */
! #define MFC_GETBS_CMD        0x0049   /*  PU Only */
! #define MFC_GETL_CMD         0x0044   /* SPU Only */
! #define MFC_GETLF_CMD        0x0046   /* SPU Only */
! #define MFC_GETLB_CMD        0x0045   /* SPU Only */
  
  /****************************************************************/
  /* MFC Synchronization Commands                           */
  /****************************************************************/
  
  #define MFC_SNDSIG_CMD       0x00A0
! #define MFC_SNDSIGB_CMD      0x00A1
! #define MFC_SNDSIGF_CMD      0x00A2
  #define MFC_BARRIER_CMD      0x00C0
  #define MFC_EIEIO_CMD        0x00C8
  #define MFC_SYNC_CMD         0x00CC
--- 87,123 ----
  /****************************************************************/
  
  #define MFC_PUT_CMD          0x0020
! #define MFC_PUTB_CMD         (MFC_PUT_CMD | MFC_BARRIER_ENABLE)
! #define MFC_PUTF_CMD         (MFC_PUT_CMD | MFC_FENCE_ENABLE)
! #define MFC_PUTL_CMD         (MFC_PUT_CMD | MFC_LIST_ENABLE)
! #define MFC_PUTLB_CMD        (MFC_PUTL_CMD | MFC_BARRIER_ENABLE)
! #define MFC_PUTLF_CMD        (MFC_PUTL_CMD | MFC_FENCE_ENABLE)
! 
! #define MFC_PUTR_CMD         (MFC_PUT_CMD | MFC_RESULT_ENABLE)
! #define MFC_PUTRB_CMD        (MFC_PUTR_CMD | MFC_BARRIER_ENABLE)
! #define MFC_PUTRF_CMD        (MFC_PUTR_CMD | MFC_FENCE_ENABLE)
! #define MFC_PUTRL_CMD        (MFC_PUTR_CMD | MFC_LIST_ENABLE)
! #define MFC_PUTRLB_CMD       (MFC_PUTRL_CMD | MFC_BARRIER_ENABLE)
! #define MFC_PUTRLF_CMD       (MFC_PUTRL_CMD | MFC_FENCE_ENABLE)
  
  /****************************************************************/
  /* MFC DMA Get Commands                                 */
  /****************************************************************/
  
  #define MFC_GET_CMD          0x0040
! #define MFC_GETB_CMD         (MFC_GET_CMD | MFC_BARRIER_ENABLE)
! #define MFC_GETF_CMD         (MFC_GET_CMD | MFC_FENCE_ENABLE)
! #define MFC_GETL_CMD         (MFC_GET_CMD | MFC_LIST_ENABLE)
! #define MFC_GETLB_CMD        (MFC_GETL_CMD | MFC_BARRIER_ENABLE)
! #define MFC_GETLF_CMD        (MFC_GETL_CMD | MFC_FENCE_ENABLE)
  
  /****************************************************************/
  /* MFC Synchronization Commands                           */
  /****************************************************************/
  
  #define MFC_SNDSIG_CMD       0x00A0
! #define MFC_SNDSIGB_CMD      (MFC_SNDSIG_CMD | MFC_BARRIER_ENABLE)
! #define MFC_SNDSIGF_CMD      (MFC_SNDSIG_CMD | MFC_FENCE_ENABLE)
  #define MFC_BARRIER_CMD      0x00C0
  #define MFC_EIEIO_CMD        0x00C8
  #define MFC_SYNC_CMD         0x00CC
*************** typedef struct mfc_list_element {
*** 125,134 ****
  /* MFC Atomic Commands                                 */
  /****************************************************************/
  
! #define MFC_GETLLAR_CMD      0x00D0   /* SPU Only */
! #define MFC_PUTLLC_CMD       0x00B4   /* SPU Only */
! #define MFC_PUTLLUC_CMD      0x00B0   /* SPU Only */
! #define MFC_PUTQLLUC_CMD     0x00B8   /* SPU Only */
  
  /****************************************************************/
  /* Channel Defines                                    */
--- 126,145 ----
  /* MFC Atomic Commands                                 */
  /****************************************************************/
  
! #define MFC_GETLLAR_CMD      0x00D0
! #define MFC_PUTLLC_CMD       0x00B4
! #define MFC_PUTLLUC_CMD      0x00B0
! #define MFC_PUTQLLUC_CMD     0x00B8
! 
! /****************************************************************/
! /* MFC SL1 Storage Control Commands                             */
! /****************************************************************/
! 
! #define MFC_SDCRT_CMD        0x0080
! #define MFC_SDCRTST_CMD      0x0081
! #define MFC_SDCRZ_CMD        0x0089
! #define MFC_SDCRST_CMD       0x008D
! #define MFC_SDCRF_CMD        0x008F
  
  /****************************************************************/
  /* Channel Defines                                    */
*************** typedef struct mfc_list_element {
*** 209,214 ****
--- 220,232 ----
  #define mfc_eieio(tag,tid,rid) spu_mfcdma32(0,0,0,tag,MFC_CMD_WORD(tid,rid,MFC_EIEIO_CMD))
  #define mfc_sync(tag)          spu_mfcdma32(0,0,0,tag,MFC_SYNC_CMD)
  
+ /* MFC SL1 Storage Control Commands */
+ #define mfc_sdcrt(  ea,size,tag,tid,rid) spu_mfcdma64(0,mfc_ea2h(ea),mfc_ea2l(ea),size,tag,MFC_CMD_WORD(tid,rid,MFC_SDCRT_CMD))
+ #define mfc_sdcrtst(ea,size,tag,tid,rid) spu_mfcdma64(0,mfc_ea2h(ea),mfc_ea2l(ea),size,tag,MFC_CMD_WORD(tid,rid,MFC_SDCRTST_CMD))
+ #define mfc_sdcrz(  ea,size,tag,tid,rid) spu_mfcdma64(0,mfc_ea2h(ea),mfc_ea2l(ea),size,tag,MFC_CMD_WORD(tid,rid,MFC_SDCRZ_CMD))
+ #define mfc_sdcrst( ea,size,tag,tid,rid) spu_mfcdma64(0,mfc_ea2h(ea),mfc_ea2l(ea),size,tag,MFC_CMD_WORD(tid,rid,MFC_SDCRST_CMD))
+ #define mfc_sdcrf(  ea,size,tag,tid,rid) spu_mfcdma64(0,mfc_ea2h(ea),mfc_ea2l(ea),size,tag,MFC_CMD_WORD(tid,rid,MFC_SDCRF_CMD))
+ 
  /* DMA Queue */
  #define mfc_stat_cmd_queue()          spu_readchcnt(MFC_Cmd)
  
*************** typedef struct mfc_list_element {
*** 267,273 ****
  #define spu_read_event_mask()         spu_readch(SPU_RdEventMask)
  
  /* SPU State Management */
! #define spu_read_machine_status()     spu_readch(SPU_MachStat)
  #define spu_write_srr0(srr0)          spu_writech(SPU_WrSRR0,srr0)
  #define spu_read_srr0()               spu_readch(SPU_RdSRR0)
  
--- 285,291 ----
  #define spu_read_event_mask()         spu_readch(SPU_RdEventMask)
  
  /* SPU State Management */
! #define spu_read_machine_status()     spu_readch(SPU_RdMachStat)
  #define spu_write_srr0(srr0)          spu_writech(SPU_WrSRR0,srr0)
  #define spu_read_srr0()               spu_readch(SPU_RdSRR0)
  
*************** extern unsigned int __mfc_tag_release (u
*** 291,294 ****
--- 309,316 ----
  extern unsigned int __mfc_multi_tag_reserve (unsigned int);
  extern unsigned int __mfc_multi_tag_release (unsigned int, unsigned int);
  
+ #ifdef __cplusplus
+ }
+ #endif
+ 
  #endif /* __SPU_MFCIO_H__ */

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]