Ejemplo n.º 1
0
void *tanger_stm_realloc(void *ptr, size_t size)
{
  /* TODO to ITM_imize */
  void *p;
#ifdef EXPLICIT_TX_PARAMETER
  struct stm_tx * tx = stm_current_tx();
#endif /* EXPLICIT_TX_PARAMETER */
  if (ptr == NULL) {
    /* Equivalent to malloc */
    return tanger_stm_malloc(size);
  }
  if (size == 0) {
    /* Equivalent to free */
    tanger_stm_free(ptr);
    return NULL;
  }
  /* Allocate new region */
  p = tanger_stm_malloc(size);
  /* Copy old content to new region */
  stm_load_bytes(TX_PARAM ptr, p, malloc_usable_size(ptr));
  /* Free old region */
  tanger_stm_free(ptr);

  return p;
}
Ejemplo n.º 2
0
TANGER_LOADSTORE_ATTR
void tanger_stm_loadregion(tanger_stm_tx_t* tx, uint8_t *src, uintptr_t bytes, uint8_t *dest)
{
#ifdef STACK_CHECK
  if (on_stack(src))
    memcpy(dest, src, bytes);
#endif /* STACK_CHECK */
  stm_load_bytes(TX_PARAM src, dest, bytes);
}
Ejemplo n.º 3
0
uint16_t stm_load_u16(TXPARAMS volatile uint16_t *addr)
{
  if (((uintptr_t)addr & 0x01) != 0) {
    uint16_t val;
    stm_load_bytes(TXARGS (volatile uint8_t *)addr, (uint8_t *)&val, sizeof(uint16_t));
    return val;
  } else if (sizeof(stm_word_t) == 4) {
    convert_32_t val;
    val.u32 = (uint32_t)stm_load(TXARGS (volatile stm_word_t *)((uintptr_t)addr & ~(uintptr_t)0x03));
    return val.u16[((uintptr_t)addr & 0x03) >> 1];
  } else {
Ejemplo n.º 4
0
static INLINE
uint16_t int_stm_load_u16(volatile uint16_t *addr)
{
  TX_GET;
  if (unlikely(((uintptr_t)addr & 0x01) != 0)) {
    uint16_t val;
    stm_load_bytes((volatile uint8_t *)addr, (uint8_t *)&val, sizeof(uint16_t));
    return val;
  } else if (sizeof(stm_word_t) == 4) {
    convert_32_t val;
    val.u32 = (uint32_t)TM_LOAD((volatile stm_word_t *)((uintptr_t)addr & ~(uintptr_t)0x03));
    return val.u16[((uintptr_t)addr & 0x03) >> 1];
  } else {