summary refs log tree commit diff
path: root/ports/sysdeps/tile/stackguard-macros.h
blob: f2e041b99bab2c02bbf23922c9c92eec3d92a01d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/wordsize.h>

#ifdef __tilegx__
# if __WORDSIZE == 64
#  define STACK_CHK_GUARD \
  ({ uintptr_t x; asm ("addi %0, tp, -16; ld %0, %0" : "=r" (x)); x; })
#  define POINTER_CHK_GUARD \
  ({ uintptr_t x; asm ("addi %0, tp, -24; ld %0, %0" : "=r" (x)); x; })
# else
#  define STACK_CHK_GUARD \
  ({ uintptr_t x; asm ("addi %0, tp, -8; ld4s %0, %0" : "=r" (x)); x; })
#  define POINTER_CHK_GUARD \
  ({ uintptr_t x; asm ("addi %0, tp, -12; ld4s %0, %0" : "=r" (x)); x; })
# endif
#else
# define STACK_CHK_GUARD \
  ({ uintptr_t x; asm ("addi %0, tp, -8; lw %0, %0" : "=r" (x)); x; })
# define POINTER_CHK_GUARD \
  ({ uintptr_t x; asm ("addi %0, tp, -12; lw %0, %0" : "=r" (x)); x; })
#endif