The C/C++ Language Extensions for Cell Broadband Engine architecture specification also defines a set of optional convenience macros to assist in accessing the SPU and MFC facilities available through the channel interface.
These macros, specified in spu_mfcio.h , can either be implemented as macros or as built-in functions within the compiler.
| Macro | Description |
|---|---|
| Effective Address Utilities | |
| mfc_ea2h(ea) | Extract higher 32-bits from effective address |
| mfc_ea2l(ea) | Extract lower 32-bits from effective address |
| mfc_hl2ea(high, low) | Concatenate higher and lower 32-bits of an effective address |
| mfc_ceil128(value) | Round up value to the next multiple of 128 |
| DMA Commands | |
| mfc_put(ls, ea, size, tag, tid, rid) | Move data from local storage to effective address |
| mfc_putb(ls, ea, size, tag, tid, rid) | Move data from local storage to effective address with barrier |
| mfc_putf(ls, ea, size, tag, tid, rid) | Move data from local storage to effective address with fence |
| mfc_get(ls, ea, size, tag, tid, rid) | Move data from effective address to local storage |
| mfc_getb(ls, ea, size, tag, tid, rid) | Move data from effective address to local storage with barrier |
| mfc_getf(ls, ea, size, tag, tid, rid) | Move data from effective address to local storage with fence |
| List DMA Commands | |
| mfc_putl(ls, ea, list, list_size, tag, tid, rid) | Move data from local storage to effective address using MFC list |
| mfc_putlb(ls, ea, list, list_size, tag, tid, rid) | Move data from local storage to effective address using MFC list with barrier |
| mfc_putlf(ls, ea, list, list_size, tag, tid, rid) | Move data from local storage to effective address listing MFC list with fence |
| mfc_getl(ls, ea, list, list_size, tag, tid, rid) | Move data from effective address to local storage using MFC list |
| mfc_getlb(ls, ea, list, list_size, tag, tid, rid) | Move data from effective address to local storage using MFC list with barrier |
| mfc_getlf(ls, ea, list, list_size, tag, tid, rid) | Move data from effective address to local storage using MFC list with fence |
| Atomic Update Commands | |
| mfc_getllar(ls, ea, tid, rid) | Get lock line and create reservation |
| mfc_putllc(ls, ea, tid, rid) | Put lock line if reservation for effective address exists |
| mfc_putlluc(ls, ea, tid, rid) | Put lock line unconditional |
| mfc_putqlluc(ls, ea, tag, tid, rid) | Put queued lock line unconditional |
| Synchronization Commands | |
| mfc_sndsig(ls, ea, tag, tid, rid) | Send signal |
| mfc_sndsigb(ls, ea, tag, tid, rid) | Send signal with barrier |
| mfc_sndsigf(ls, ea, tag, tid, rid) | Send signal with fence |
| mfc_barrier(tag) | Enqueue mfc_barrier command into DMA queue |
| mfc_eieio(tag, tid, rid) | Enqueue mfc_eieio command into DMA queue |
| mfc_sync(tag) | Enqueue mfc_sync command into DMA queue |
| DMA Status | |
| mfc_stat_ cmd_queue() | Check number of available entries in MFC DMA queue |
| mfc_write_tag_mask(mask) | Set tag mask to select tag groups to be included in query operation |
| mfc_read_tag_mask() | Read tag mask indicating groups to be included in query operation |
| mfc_write_tag_update(ts) | Request the tag status to be updated |
| mfc_write_tag_update_immediate() | Request that tag status be updated immediately |
| mfc_write_tag_update_any() | Request that tag status be updated when any tag groups complete |
| mfc_write_tag_update_all() | Request that tag status be updated when all tag groups complete |
| mfc_stat_tag_update() | Check availability of tag Update Request Status channel |
| mfc_read_tag_status() | Wait for an updated tag status |
| mfc_read_tag_status_immediate() | Wait for the updated tag status of any enabled group |
| mfc_read_tag_status_any() | Wait for no outstanding operations for any enabled groups |
| mfc_read_tag_status_all() | Wait for no outstanding operations for all enabled groups |
| mfc_stat_tag_status() | Check availability of MFC_RdTagStat channel |
| mfc_read_list_stall_status() | Read list DMA stall-and-notify status |
| mfc_stat_list_stall_status() | Check availability of List DMA stall-and-notify status |
| mfc_write_list_stall_ack(tag) | Acknowledge tag group containing stalled DMA list commands |
| mfc_read_atomic_status() | Check availability of atomic command status |
| Multisource Synchronization Request | |
| mfc_write_multi_src_sync_request() | Request multisource synchronization |
| mfc_stat_multi_src_sync_request() | Check status of multisource synchronization request |
| SPU Signal Notification | |
| spu_read_signal1() | Atomically read and clear Signal Notification 1 channel |
| spu_stat_signal1() | Check if pending signals exist on Signal Notification 1 channel |
| spu_read_signal2() | Atomically read and clear Signal Notification 2 channel |
| spu_stat_signal2() | Check if pending signals exist on Signal Notification 2 channel |
| SPU Mailboxes | |
| spu_read_in_mbox() | Read next data entry in the SPU Inbound Mailbox |
| spu_stat_in_mbox() | Get the number of data entries in the SPU Inbound Mailbox |
| spu_write_out_mbox(data) | Send data to the SPU Outbound Mailbox |
| spu_stat_out_mbox() | Get the available capacity of the SPU Outbound Mailbox |
| spu_write_out_intr_mbox(data) | Send data to the SPU Outbound Interrupt Mailbox |
| spu_stat_out_intr_mbox() | Get the available capacity of the SPU Outbound Interrupt Mailbox |
| SPU Decrementer | |
| spu_read_decrementer() | Read the current value of the decrementer |
| spu_write_decrementer(count) | Load a value into the decrementer |
| SPU Events | |
| spu_read_event_status() | Read the event status or stall until status is available |
| spu_stat_event_status() | Check availability of event status |
| spu_write_event_mask(mask) | Select events to be monitored by event status |
| spu_write_event_ack(ack) | Acknowledge events |
| spu_read_event_mask() | Read Event Status Mask |
| SPU State Mangement | |
| spu_read_machine_status() | Read current SPU machine status |
| spu_write_srr0(srr0) | Write to the SPU Save Restore Register 0 |
| spu_read_srr0() | Read the SPU Save Restore Register 0 |
| Function | Description |
|---|---|
| mfc_tag_reserve() | Reserve a single tag for exclusive use |
| mfc_tag_release() | Release a single tag from exclusive use |
| mfc_multi_tag_reserve() | Reserve a sequential group of tags for exclusive use |
| mfc_multi_tag_release() | Release a sequential group of tags from exclusive use |