summaryrefslogtreecommitdiff
path: root/lib/thread/tls-impl+fsbase-x64.s
blob: d34e4219df4a13fc975c796819bc9cad8e2f43cf (plain)
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
40
41
42
43
44
45
46
47
48
.set tid,	0x00
.set len,	0x04
.set slots,	0x18

/* const tid : (-> tid) */
.globl thread$tid
.globl _thread$tid
thread$tid:
_thread$tid:
	movl	%fs:tid, %eax
	ret

/* const _tlsset : (k : key, v : void# -> void) */
.globl thread$_tlsset
.globl _thread$_tlsset
thread$_tlsset:
_thread$_tlsset:
	cmpl	%fs:len, %edi
	jnb	oob

	movslq	%edi, %rdi
	movq	$slots, %r10
	movq	%rsi, %fs:(%r10, %rdi, 0x8)
	ret

/* const _tlsget : (k : key -> void#) */
.globl thread$_tlsget
.globl _thread$_tlsget
thread$_tlsget:
_thread$_tlsget:
	cmpl	%fs:len, %edi
	jnb	oob

	movslq	%edi, %rdi
	movq	$slots, %r10
	movq	%fs:(%r10, %rdi, 0x8), %rax
	ret

oob:
	call	thread$tlsoob

/* const tlslen : (-> key) */
.globl thread$tlslen
.globl _thread$tlslen
thread$tlslen:
_thread$tlslen:
	movl	%fs:len, %eax
	ret