rcp.h File Reference
#include "pico.h"
Include dependency graph for rcp.h:

Go to the source code of this file.

Macros

#define RCP_MASK_TRUE   _u(0xa500a500)
 
#define RCP_MASK_FALSE   _u(0x00c300c3)
 
#define RCP_MASK_INTXOR   _u(0x96009600)
 
#define __rcpinline   __force_inline
 
#define rcp_canary_get(tag)
 
#define rcp_canary_get_nodelay(tag)
 
#define rcp_canary_check(tag, canary)
 
#define rcp_canary_check_nodelay(tag, canary)
 
#define rcp_count_set(cnt)
 
#define rcp_count_set_nodelay(cnt)
 
#define rcp_count_check(cnt)
 
#define rcp_count_check_nodelay(cnt)
 

Functions

static __force_inline void rcp_salt_core0 (uint64_t salt)
 
static __force_inline void rcp_salt_core0_nodelay (uint64_t salt)
 
static __force_inline void rcp_salt_core1 (uint64_t salt)
 
static __force_inline void rcp_salt_core1_nodelay (uint64_t salt)
 
static __force_inline uint32_t rcp_canary_status (void)
 
static __force_inline uint32_t rcp_canary_status_nodelay (void)
 
static __force_inline void rcp_bvalid (uint32_t b)
 
static __force_inline void rcp_bvalid_nodelay (uint32_t b)
 
static __force_inline void rcp_btrue (uint32_t b)
 
static __force_inline void rcp_btrue_nodelay (uint32_t b)
 
static __force_inline void rcp_bfalse (uint32_t b)
 
static __force_inline void rcp_bfalse_nodelay (uint32_t b)
 
static __force_inline void rcp_b2valid (uint32_t b0, uint32_t b1)
 
static __force_inline void rcp_b2valid_nodelay (uint32_t b0, uint32_t b1)
 
static __force_inline void rcp_b2and (uint32_t b0, uint32_t b1)
 
static __force_inline void rcp_b2and_nodelay (uint32_t b0, uint32_t b1)
 
static __force_inline void rcp_b2or (uint32_t b0, uint32_t b1)
 
static __force_inline void rcp_b2or_nodelay (uint32_t b0, uint32_t b1)
 
static __force_inline void rcp_bxorvalid (uint32_t b, uint32_t mask)
 
static __force_inline void rcp_bxorvalid_nodelay (uint32_t b, uint32_t mask)
 
static __force_inline void rcp_bxortrue (uint32_t b, uint32_t mask)
 
static __force_inline void rcp_bxortrue_nodelay (uint32_t b, uint32_t mask)
 
static __force_inline void rcp_bxorfalse (uint32_t b, uint32_t mask)
 
static __force_inline void rcp_bxorfalse_nodelay (uint32_t b, uint32_t mask)
 
static __force_inline void rcp_ivalid (uint32_t x, uint32_t parity)
 
static __force_inline void rcp_ivalid_nodelay (uint32_t x, uint32_t parity)
 
static __force_inline void rcp_iequal (uint32_t x, uint32_t y)
 
static __force_inline void rcp_iequal_nodelay (uint32_t x, uint32_t y)
 
static __force_inline uint8_t rcp_random_byte (void)
 
static __force_inline uint8_t rcp_random_byte_nodelay (void)
 
static __force_inline void rcp_panic (void)
 

Macro Definition Documentation

◆ rcp_canary_check

#define rcp_canary_check (   tag,
  canary 
)
Value:
({ \
rcp_asm ( \
"mcr p7, #0, %0, c%c1, c%c2, #1\n" \
: : "r" (canary), \
"i" (((tag) >> 4) & 0xf), "i" ((tag) & 0xf) \
); \
})

◆ rcp_canary_check_nodelay

#define rcp_canary_check_nodelay (   tag,
  canary 
)
Value:
({ \
rcp_asm ( \
"mcr2 p7, #0, %0, c%c1, c%c2, #1\n" \
: : "r" (canary), \
"i" (((tag) >> 4) & 0xf), "i" ((tag) & 0xf) \
); \
})

◆ rcp_canary_get

#define rcp_canary_get (   tag)
Value:
({ \
uint32_t __canary_u32; \
rcp_asm ( \
"mrc p7, #0, %0, c%c1, c%c2, #1\n" \
: "=r" (__canary_u32) \
: "i" ((tag >> 4) & 0xf), "i" (tag & 0xf) \
); \
__canary_u32; \
})

◆ rcp_canary_get_nodelay

#define rcp_canary_get_nodelay (   tag)
Value:
({ \
uint32_t __canary_u32; \
rcp_asm ( \
"mrc2 p7, #0, %0, c%c1, c%c2, #1\n" \
: "=r" (__canary_u32) \
: "i" (((tag) >> 4) & 0xf), "i" ((tag) & 0xf) \
); \
__canary_u32; \
})

◆ rcp_count_check

#define rcp_count_check (   cnt)
Value:
rcp_asm ( \
"mcr p7, #5, r0, c%c0, c%c1, #1\n" \
: : "i"(((cnt) >> 4) & 0xf), "i"((cnt) & 0xf) \
);

◆ rcp_count_check_nodelay

#define rcp_count_check_nodelay (   cnt)
Value:
rcp_asm ( \
"mcr2 p7, #5, r0, c%c0, c%c1, #1\n" \
: : "i"(((cnt) >> 4) & 0xf), "i"((cnt) & 0xf) \
);

◆ rcp_count_set

#define rcp_count_set (   cnt)
Value:
rcp_asm ( \
"mcr p7, #4, r0, c%c0, c%c1, #0\n" \
: : "i"(((cnt) >> 4) & 0xf), "i"((cnt) & 0xf) \
);

◆ rcp_count_set_nodelay

#define rcp_count_set_nodelay (   cnt)
Value:
rcp_asm ( \
"mcr2 p7, #4, r0, c%c0, c%c1, #0\n" \
: : "i"(((cnt) >> 4) & 0xf), "i"((cnt) & 0xf) \
);