-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIID.xs
39 lines (33 loc) · 835 Bytes
/
IID.xs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#ifdef PERL_IMPLICIT_CONTEXT
/*
* LOG2(a) == floor(log_2(a))
*/
# define LOG2(a) M(((S16(S8(S4(S2(S1(a))))))>>1)+1)
# define S1(a) (a)|((a)>>1)
# define S2(a) (a)|((a)>>2)
# define S4(a) (a)|((a)>>4)
# define S8(a) (a)|((a)>>8)
# define S16(a) (a)|((a)>>16)
# define M(a) \
(((a)&0xffff0000 ? 16 : 0) +\
((a)&0xff00ff00 ? 8 : 0) +\
((a)&0xf0f0f0f0 ? 4 : 0) +\
((a)&0xcccccccc ? 2 : 0) +\
((a)&0xaaaaaaaa ? 1 : 0))
# define rvalue() ((UV)aTHX)>>LOG2(sizeof *(aTHX))
#else // !PERL_IMPLICIT_CONTEXT
# define rvalue() 0
#endif
MODULE = Thread::IID PACKAGE = Thread::IID
UV
interpreter_id()
PROTOTYPE:
CODE:
RETVAL = rvalue();
OUTPUT:
RETVAL