A minimal set of specific intrinsincs, to make the underlying PPU instruction set accessible from the C programming language, have been provided. These intrinsics are declared in the system header file ppu_intrinsics.h.
Intrinsic | Description |
---|---|
__cctph() | Change Thread Priority to High |
__cctpl() | Change Thread Priority to Low |
__cctpm() | Change Thread Priority to Medium |
d = __cntlz(a) | Count Leading Doubleword Zeros |
d = __cntlzw(a) | Count Leading Word Zeros |
__db10cyc() | Delay 10 Cycles at Dispatch |
__db12cyc() | Delay 12 Cycles at Dispatch |
__db16cyc() | Delay 16 Cycles at Dispatch |
__db8cyc() | Delay 8 Cycles at Dispatch |
__dcbf(pointer) | Data Cache Block Flush |
__dcbst(pointer) | Data Cache Block Store |
__dcbt(pointer) | Data Cache Block Touch |
__dcbt_TH1000(eatrunc, d, ug, id) | Start Streaming Data |
__dcbt_TH1010(g0, s, unitcnt, t, u, id) | Stop Streaming Data |
__dcbtst(pointer) | Data Cache Block Touch for Store |
__dcbz(pointer) | Data Cache Block Set to Zero |
__eieio() | Enforce In-Order Execution of I/O |
d = __fabs(a) | Double Absolute Value |
d = __fabsf(a) | Float Absolute Value |
d = __fcfid(a) | Convert Doubleword to Double |
d = __fctid(a) | Convert Double to Doubleword |
d = __fctidz(a) | Convert Double to Doubleword with Round Towards Zero |
d = __fctiw(a) | Convert Double to Word |
d = __fctiwz(a) | Convert Double to Word with Round Toward Zero |
d = __fmadd(a,b,c) | Double Fused Multiply and Add |
d = __fmadds(a,b,c) | Float Fused Multiply and Add |
d = __fmsub(a,b,c) | Double Fused Multiply and Subtract |
d = __fmsubs(a,b,c) | Float Fused Multiply and Subtract |
d = __fmul(a,b) | Double Mulitply |
d = __fmuls(a,b) | Float Multiply |
d = __fnabs(a) | Double Negative Absolute Value |
d = __fnabsf(a) | Float Negative Absolute Value |
d = __fnmadd(a,b,c) | Double Fused Negative Multiply and Add |
d = __fnmadds(a,b,c) | Float Fused Negative Multiply and Add |
d = __fnmsub(a,b,c) | Double Fused Negative Multiply and Subtract |
d = __fnmsubs(a,b,c) | Float Fused Negative Multiply and Subtract |
d = __fres(a) | Float Reciprocal Estimate |
d = __frsp(a) | Round to Single Precision |
d = __fsel(a,b,c) | Floating Point Select of Double |
d = __fsels(a,b,c) | Floating Point Select of Float |
d = __fsqrt(a) | Double Square Root |
d = __fsqrts(a) | Float Square Root |
__icbi(pointer) | Instruction Cache Block Invalidate |
__isync() | Instruction Sync |
d = __ldarx(pointer) | Load Doubleword with Reserved |
d = __ldbrx(pointer) | Load Reversed Doubleword |
d = __lhbrx(pointer) | Load Reversed Halfword |
d = __lwarx(pointer) | Load Word with Reserved |
d = __lwbrx(pointer) | Load Reversed Word |
__lwsync() | Light Weight Sync |
d = __mffs() | Move from Floating-Point Status and Control Register |
d = __mfspr(spr) | Move from Special Purpose Regiser |
d = __mftb() | Move from Time Base |
__mtfsb0(bt) | Unset Field of FPSCR |
__mtfsb1(bt) | Set Field of FPSCR |
__mtfsf(flm,b) | Set Fields of FPSCR |
__mtfsfi(bf,u) | Set Field FPSCR from other Field |
__mtspr(spr,value) | Move to Special Purpose Register |
d = __mulhdu(a,b) | Multiply Double Unsigned Word, High Part |
d = __mulhd(a,b) | Multiply Doubleword, High Part |
d = __mulhwu(a,b) | Multiply Unsigned Word, High Part |
d = __mulhw(a,b) | Multiply Word, High Part |
__nop() | No Operation |
__protected_stream_count(count,id) | Set the Number of Blocks to Stream |
__protected_stream_go() | Start All Streams |
__protected_stream_set(d,addr,id) | Set Up a Stream |
__protected_stream_stop(id) | Stop a Stream |
__protected_stream_stop_all() | Stop All Streams |
__protected_unlimited_stream_set(d,addr,id) | Set Up an Unlimited Stream |
d = __rldcl(a,b,mb) | Rotate Left Doubleword then Clear Left |
d = __rldcr(a,b,me) | Rotate Left Doubleword then Clear Right |
d = __rldic(a,sh,mb) | Rotate Left Doubleword Immediate then Clear |
d = __rldicl(a,sh,mb) | Rotate Left Doubleword Immediate then Clear Left |
d = __rldicr(a,sh,me) | Rotate Left Doubleword Immediate then Clear Right |
d = __rldimi(a,b,sh.mb) | Rotate Left Doubleword Immediate then Mask Insert |
d = __rlwimi(a,b,sh,mb,me) | Rotate Left Word Immediate the Mask Insert |
d = __rlwinm(a,sh,mb,me) | Rotate Left Word Immediate then AND with Mask |
d = __rlwnm(a,v,mb,me) | Rotate Left Word then AND with Mask |
d = __setflm(a) | Save and Set the FPSCR |
__stdbrx(pointer,b) | Store Reversed Doubleword |
d = __stdcx(pointer,b) | Store Doubleword Conditional |
__sthbrx(pointer,b) | Store Reversed Halfword |
__stwbrx(pointer,b) | Store Reversed Word |
d = __stwcx(pointer,b) | Store Word Conditional |
__sync() | Sync |